DAY_008[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 6일
0

국비과정

목록 보기
9/99

 🌞 Day 008 : 배열, 이차원배열 



 🪐 1 교시 

 ⚡ 연습 문제 : 중복 숫자 없애기 

  • 방법 1.

    • 아래의 코드는 숫자뽑는 while문 안에 넣는다.
    • 그러나 굳이 변수 cnt를 만들지 않아도 되는 방법이 있다.
  • 방법2.

    • int j;부터 continue;까지의 코드가 중복 숫자 제거
      방법1과 결과는 같다.

 ⚡ 연습 문제 : 연속 달력 출력하기 2 

  • 어제(Day007) 연습했던 연속해서 달력 출력하는 코드를 응용
  • 새로 배운 배열을 이용하면 코드를 줄일 수 있다
  • 각 달이 몇 일로 끝나는지 순서대로 입력된 배열을 만들면 됨
  • 위 코드블럭에서 변수 b는 위에 미리 만들어 놓은 윤년 여부를 표시하는 boolean변수 b
  • 배열 mdays가 있으므로 lastDay를 따로 계산할 코드가 필요없어짐
  • 이만큼을 지우고 대신 1일부터 말일까지 계산하는 for문의 조건식을 잊지말고 수정하기
  • for(int i=1; i<=lastDay; i++)에서
    lastDaymdays[m]


 ⚡ 연습 문제 : (입력)점수 ➡ (출력)학점 

  • 다음 시험에 나올 가능성 높은 문제
  • 문제
    점수를 입력 받아서 해당 학점을 출력
    if문을 이용하지 않고 배열을 이용해서 출력할 것.
    90 이상 A, 80 이상 B, 70 이상 C, 60 이상 D, 나머지 F



 🪐 2 교시 

 ⚡ 연습 문제 : 야구 게임 

  • 야구게임이란?
    컴퓨터가 나에게 알려주지 않은 숫자를 질문과 답변을 통해 맞춰가는 게임
    사용자에게 알려주지 않은 숫자 : 6 5 7 같은 한자리 숫자 세 개를 준비
    사용자에게 숫자 세 개를 입력 받는다.
    질문 받은 숫자와 미리 준비한 숫자를 비교한다.
    답변은 같은 숫자가 자리수까지 같으면 Strike 숫자만 같으면 Ball을 출력
    숫자하나는 0~9까지 세개의 숫자 중 중복 숫자 없음
  • 예시 )
    컴퓨터 : 5 6 8
    사용자 : 4 5 8?
    ∴ 답변 -> 1S 1B
    (8은 자리수까지 같으니까 s, 5는 숫자는 같지만 자리가 달라서 b)
  • 코드 작성 순서
    1. 컴퓨터가 나에게 알려주지 않는 숫자를 저장할 배열, 사용자가 입력한 숫자를 저장할 배열 생성
    2. 컴퓨터가 나에게 알려주지 않은 숫자 세 개를 생성해서 배열에 저장
      (0~9 범위에서 난수 3개 생성하고 배열로 저장)
    3. 사용자로부터 숫자 세 개를 입력받는다.
    4. 컴퓨터가 저장한 숫자와 사용자가 입력한 숫자를 비교해서 Strike와 Ball을 count
    5. 카운트 결과를 출력
    6. 3~5를 숫자를 맞출 때까지 반복

  • 사용자에게 숫자 3개를 입력받아 배열로 저장하는 다른 2가지 방법



 🪐 3 교시 

 🔖 배열 출력하기 

  • 위 코드에 있는 String 배열 C를 오름차순으로 정렬해서 출력해보기
  • String끼리 비교하는 것을 자료형과 캐스팅연산 배울 때 배웠는데 그새 잊었는지 아예 생각지도 못했었음.. 정리해둔 것을 다시 읽어봐야 겠다.

 🔖 2차원 배열 (1) 

  • 2차원 배열?
    행과 열의 개념을 사용하는 인덱스가 2개인 배열
  • 2차원 배열의 변수 선언 : 행과 열을 의미하는 [ ]가 두 개 사용
    int [][] a;
  • 2차원 배열의 공간 생성
    변수명 = new 자료형[행의 수][열의 수]
  • 3행 2열의 2차원 배열 생성
    (2개의 요소를 가지는 일차원 배열을 3개 생성 = 3행 2열의 배열)
  • 이차원 배열의 구조
    b[0] : {1,2}    b[1] : {3,4}    b[2] : {5,6}

    b[0][0] : 1    b[0][1] : 2
    b[1][0] : 3    b[1][1] : 4
    b[2][0] : 5    b[2][1] : 6



 🪐 4 교시 

 🔖 2차원 배열 (2) 

  • 2차원 배열의 요소 접근 - 2개의 인덱스를 사용
    변수명[행의 인덱스 - 0부터 시작][열의 인덱스 - 0부터 시작] = 값;
    a 2차원 배열의 3번째 행의 2번째 요소에 456 입력
    a[2][1] = 456;
    세 번째 행의 두 번째 값 출력
    System.out.println(a[2][1]+"\n");

    [ 예제 ]

  • 2차원 배열을 만들고,
    이중반복문을 이용해서 값을 저장하고,
    이중반복문을 이용해서 출력하기

  • 배열 만들고 저장하기

  • 2차원 배열을 출력하는 2가지 방법

  • 자바의 2차원 배열은 각행에 있는 열의 개수가 서로 다를 수 있다.



 🪐 5 교시 

 ⚡ 연습 문제 : 성적표 출력 (학점까지) 

  • 2차원 배열을 사용할 것!



 🪐 6 교시 

 🔖 배열의 복사 

    [ 1차원 배열의 복사]

  • 레퍼런스 변수 간의 값의 복사로는 배열의 복사까지 이루어지지 않는다.
  • 위의 동작 b=a; 는 a가 갖고 있는 참조값(주소)를 b 변수에 복사한 것이므로 배열의 공간은 하나, 그 배열 주소를 저장한 변수는 두 개로 설정한 것과 같다.
    따라서 a[2]값 변경은 b[2]값 변경과 같다.
  • 1차원 배열을 복사하는 방법 2가지
    • 일일히 실제 값을 복사하는 방법
    •  배열.clone( ) 을 쓰는 방법

  • 위코드를 보면 1번 방법으로 b에 a를 복사한 뒤에는 a[3]의 값을 바꿔도 b는 변하지 않았음을 볼 수 있다.
    (아래 주석이 출력된 배열의 상태)
  • 2번 방법도 a[4]의 값을 바꿔도 복사된 c의 값은 바뀌지 않았다는 것을 보여줌

    [ 2차원 배열의 복사]

  • 이차원배열(다차원배열)은 clone 메소드를 사용하면
  • 참조변수가 저장된 주소에 있는 1차원 배열까지만 복사
    (참조값들의 배열이 복사될 뿐...)
    그래서 실제 데이터가 저장될 공간을 별도로 생성 후 하나씩 일일이 다 복사해야 한다.

 🔖 메서드(Method) 

  • Method
    : Function 이라고도 부르며, 간헐적으로 반복되는 코드들을 별도로 정의(작성)해 놓고, 정해 놓은 이름으로 그 코드들의 이름을 불러서 실행하는 단위실행코드들

  • Java에서는 Function이란 말보다 Method라는 표현을 주로 사용

  • 특징

    1. 명령들이 모여서 기능을 정의 하는 단위
    2. 일련의 실행코드들을 묶어서 재활용
    3. 메서드는 각 메서드마다 고유한 이름이 있다.
    4. 메서드가 이름이 불리워져서 실행되라는 명령(Call-호출)을 받으면,
      그 메서드의 몸체를 이루는 코드들이 실행되는 형식
    5. 자바의 메서드는 이름 옆에 항상 괄호( )를 달고 나온다.
    6. 메서드의 생성 : 반드시 클래스의 내부에서만 만들 수 있다.
    7. main 메서드 위쪽 또는 아래쪽에 만들 수 있다.
  • 메서드의 정의(define)

    • 개발자가 정의한 메서드의 정의 위치는 main의 위나 아래 모두 정의 가능
    • public static void
      : 지금은 메서드 정의할 때 앞에 붙이는 문법의 요소라고 이해하기
    • 개발자가 정의한 메서드는 이름도 개발자 맘대로 필요한 이름으로 정의
  • 메서드를 호출하는 방법
    • 메서드이름(전달인수);



 🪐 7 교시 

 🔖 메서드(Method) (2) 

  • 메서드를 사용하는 두 번째 목적
    명령들의 단순 실행이 아닌 소정의 값을 연산하기 위한 명령들의 반복 실행

  • 예 : 사각형의 넓이를 계산하는 메서드,
          삼각형의 넓이를 계산하는 메서드,
          성적표를 양식에 맞게 출력하는메서드,
          달력을 양식에 맞게 출력하는 메서드 등

  • 두 번째 목적에 필요한 메서드를 그들이 실행되기 위해, 필요한 값들이 있다.
    사각형의 넓이 ➡️ 밑변의 길이와 높이
    성적표 ➡️ 국어, 영어, 수학, 총점, 평균이 필요
    달력 ➡️ 년과 월
    두 번째 목적으로 함수를 만들려면 필요한 값들을 함수에 전달하고 실행되게 해야 한다.

  • 호출한 곳에서 넣어주는 값“전달인수”라고 부르고,
    메서드에서 전달된 값을 받아주는 변수“매개변수”라고 부른다.
  •  매개변수 
    : 메서드 호출 시 메서드가 필요로하는 데이터를 전달해 줄 수 있는 매개 역할의 변수
    메서드의 몸체에서 괄호 안에 위치하면 전달된 값을 받아주는 변수
  •  전달 인수 
    : 메서드 호출 시 괄호 안에 넣어주는 데이터

  • 메서드는 정의된 형태로 호출해야 정상 호출된다.
    매개변수가 정해져있으면 전달해야하고, 전달 인수의 자료형 일치해야 함

  • 전달인수는 직접 값을 지정할 수도 있지만, 변수로 대체할 수도 있다.

  •  매개 변수의 선언 

      public static void 메서드이름 (자료형 매개변수이름, 자료형 매변수이름 ... ) {  }
    • 괄호 안에 변수를 선언하고 쓰는 형식,
      매개 변수 또한 필요한 개수만큼 선언해서 사용할 수 있다.
  • 다수의 매개변수를 전달 받는 메서드
    : 각 매개변수 별로 전달 받을 변수를 선언해야 한다.
    동일한 타입이라도 자료형의 생략은 허용되지 않는다.
    (int n1, n2) (X)
    (int n1, int n2) (O)

  • 전달 인수는 반드시 매개변수의 자료형과 일치하는 자료를 전달해줘야 한다.
    다수 개의 값을 전달할 때에는 자료형과 "순서"도 일치하게 전달해 줘야 한다.



 🪐 8 교시 

 ⚡ 연습 문제 : 메서드 만들기 (1) 

  • 문제
    정수 하나를 입력 받아서 그 정수에 해당하는 구구 단을 출력하세요
    구구단 출력은 메서드를 이용해서 출력합니다.
    메서드 이름 googoodan
  • 내가 만든 답 ⬇️

 ⚡ 연습 문제 : 메서드 만들기 (2) 

  • 조건에 맞는 메서드 2개 만들기

  • 내가 쓴 답 ⬇️

 🔖 Call by Value 

  1. 메서드 호출할 때 전달 인수로 넣어주는 변수와
    updateValue(새로 만든 메서드) 메서드 영역의 매개변수로 쓰이는 변수의 이름이 같아도 상관없다.
    위에서 언급한 두 변수는  지역변수 라고 부르며, 서로 다른 변수로 사용된다.
  2. 전달 인수의 변수 값이 매개변수 변수로 "값"만 전달되는 방식을  Call by Value 라고 부른다.

 🔖 Call by Reference 

  • 이와 같이  전달인수로 주소(참조값)를  보내는 호출을
     Call by Reference 라고 부른다.



 ⭐ 마무리... 

  • 이차원 배열, 메서드, 이중반복문...

  • 점점 예제들은 어려워지고 코드도 길어지고 복습하는데에도 시간이 길어진다.

  • 바로 며칠 전에 배웠던 것도 생각 못해서 예제를 못 풀기도 했다.

  • 주말에는 1주차의 내용을 다시 복습해야 겠다



profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글