Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/4월

22. 04. 15 - 이차원 배열, 총 복습(변수, 연산자, 조건문, 반복문, 배열)

giggs 2022. 4. 20. 15:16

 

다차원 배열 

- 2차원 배열만 해볼 예정

 

 

 

배열을 안다는 것은?

  1. 배열을 생성할 줄 알아야 하고 // int[][] a = new int[3][3];
  2. 배열에 접근할 줄 알아야 // a[0][0];
  3. 배열을 아는 것이다. 

 

 

 


 

 

 

1. 배열 생성하기

 

int[ ] [ ] a = new int [ 3 ] [ 3 ];

 

 

배열 생성 - 메모리 관점에서 체크해보기

 

 

 

 

 


 

 

 

 

2. 배열 접근하기

 

  • a[ 0 ] [ 1 ];
  • a 라는 배열 접근
  • a 배열은 각 칸에 - 배열 1개씩 저장되어있다.
  • 3칸이 있다.
  • a[0] [0] = 1; --> 3개 배열 중 첫 번째칸 배열에 접근해서 그 배열 첫 번째칸에 1 대입
  • a[2] [0] = 2; --> 3개 배열 중 3 번째칸 배열 접근 – 그 배열 0번째 칸에 2 대입

 

 

배열 접근 - 메모리 관점에서 체크해보기

 

 

 

 


 

 

 

 

3. 배열 출력하기

 

  • System.out.println(a[0][0]);

 

 

 

a[ 0 ] [ 1 ] , a [ 0 ] [ 2 ], a [ 0 ] [ 3 ] 이런 식을 반복문으로!

 

 

 

  • 출력을 반복문으로 할 수 있다는 것은
  • 입력도 반복문으로 할 수 있다는 것이다! - 다음 시간에 ㅎㅎ
  • 접근해서 출력까지 하는 법을 알았다. 이제 배열에 값을 입력해보자

 

 


 

 

4. 배열에 값 입력하기

 

 

 

  • 2차원 배열의 길이는 생략 가능 - int[3][3] - 2번째 숫자는 생략 가능

 

 

 

 

1차원 배열의 크기만 정해주면 그 칸 안에 들어올 배열의 크기는 정해놓지 않아도 괜찮다.

 

 

 

 

  • 3칸은 생성 – 각각의 칸들이 관리하는 배열은 아직 모르는 상태!
  • a [ 0 ] -> a에 0번째 칸에 접근 -  a[ 0 ]
  • 이 칸에 3칸짜리 배열 넣어준다 - = new int[ 3 ]; 

 

 

 

 

 

a[0] 칸에 new int[3]짜리 배열의 주소 값을 넣어준다.

 

 

 

 

a[ 0 ] = new int[ 3 ];

  • 이 코드는 오른쪽 저 작업을 의미하는 것이다.
  • 3칸짜리 배열 만들어서 그 주소 값을 a배열 [ 0 ] 번째 칸에 넣어주는 것

 

 

 

 

new int[ 3 ]으로 만든 배열에 접근해보자

  • a[0][0] = 10;
  • 코드 해석
  • a를 찾아가서  (a에는 빨간색 배열 주소 값 저장되어있다.) -
  • 그 주소 값으로 빨간색 배열 0번째 칸을 찾아가고 – (0번째 칸은 파란 배열 주소 값 저장되어있다.)
  • 그 주소 값으로 파란색 배열 찾아가서 0번째 칸에다가 – 10을 대입

 

 

 

 

 

 

 

a의 0번째 칸에서 관리하는 배열에 값 입력해보기

 

 

입력을 반복문으로 하는 것은 다음 시간에 이어서!

 

 

 

 


 

 

 

 

객체 시작

 

 

기본 세팅 및 실습 순서

  • main 안 넣어준 클래스(PrintTest)에서 메서드( test() ) 생성하고
  • main 넣어준 클래스( Main )에서 그 메서드 실행할 것이다
  • PrintTest 객체 만들어주고 그 객체로 메소드 호출
  • import PrintTest !

 

 

main 메소드 안에서 PrintTest 객체 pt 생성 후 - pt로 test( ) 메소드 호출

 

 

 

오늘은 객체 이해 여기까지만 살펴보기~

  • 만들어 놓은 Class를 데이터 타입으로 이용해서 - 객체를 만들 수 있고
  • 그렇게 생성한 객체를 이용해서 메서드를 호출 - 사용할 수 있다. 

 

 

 


 

 

 

총 복습 시작 

  1. 변수
  2. 연산자(산술, 논리, 문자)
  3. 조건문(if, else if, switch)
  4. 반복문(for, while, do-while)
  5. 배열

 

 

 


 

 

 

1. 변수

 

 

 

## Check Point 

  • [ 변수 명명 규칙 && 기본 자료형 && 문자형 && 상수형 ]

 

 

 

 

1. 변수 명명 규칙

  • 클래스 이름은 대문자로 시작
  • 메소드 이름, 변수명은 소문자로 시작
  • 띄어쓰기가 있는 여러 단어의 경우, 붙여쓰고 대문자로 변경
  • 상수 변수 이름은 모두 대문자로 작성 ex) PI
  • 상수변수 이름이 여러 개의 단어인 경우, _ 를 사용 ex)MAX_SIZE
  • PascalCase
  • camelCase

 


 

 

2. 기본 자료형일 때만 기본 값을 넣어준다.

 

 

 

  • 기본 자료형일때만 기본 값을 넣어준다~
  • 참조형 변수의 기본값은 null;
  • 개발자는 모든 걸 다 외울 필요는 없다. 어떤 게 존재하는구나
  • 이런 게 있구나 저런 게 있구나
  • 이런 상황에서 이런 걸 사용하는 구나를 알아야 한다.
  • ex) 기본자료형의 사이즈를 외우면 좋지만 필요에 따라서 검색해서 확인한 후 맞춰서 사용하기.

 

 

 


 

 

 

3. 문자형 

  • 컴퓨터가 문자를 읽어 들이는 법
  • ‘A’를 숫자로 기억하고 있다가
  • ‘A’를 출력해달라고 하면 – 대치되어있던 숫자를 -> A로 변환해서 출력해준다.
  • 대치된 숫자는 아스키코드!

 

 

 

 

 

우리가 'A'라고 입력하면, 컴퓨터는 아스키코드에서 'A'에 해당하는 65로 저장하고있다.

 

 

 

 

정말로 65로 저장되어있는지 확인 TEST

  • char ch = ‘A’;
  • System.out.println(ch+1);
  • 해주면 출력 66 나온다. 이유는?
  • 65로 저장되어있는 것에 +1해준것이라서 형 변환으로 확인해보자!
  • 숫자 확인은 int형으로 형 변환해서 확인 - (int)ch; => 65;출력
  • 문자 확인은 char형으로 형 변환해서 확인 - (char)ch; => 'A'출력

 

 

 

 

콘솔 창 출력 결과는 -  66  - 출력 됨.

 

 

 

 

Q : int로 형 변환을 안 해줬는데 왜 B가 안 나오고66이 나오는 건가요?

  • int + long을 더하기 가능할까요? 된다
  • 되긴 됐지만 사실 안 되는 것이다.
  • 컴퓨터는 타입이 다르면 연산을 못하는 것이 맞다.
  • 근데 결과는 잘 나왔네?
  • 어떻게 된 거냐면은 int + long 명령을 하면 컴퓨터는 바로 계산을 못하기 때문에
  • "계산 못해 끝"이 아니라 컴퓨터 마음대로 타입을 똑같이 만들어버린 다음에 계산을 한다.
  • size 큰 애를 따라가는 것이 보통의 처리
  • long + long으로 계산해준 것이다.

 

 

 

 

컴퓨터 마음대로 큰 size인 long으로 타입을 일치시킨 다음 - 계산한 값을 반환해 주는 것이다.

 

 

 

 

  • 이 개념 이해하고 다시 코드로 돌아간다.
  • ch + 1
  • char + int 더한 것이다.
  • 그냥 못하는 것이 아니라 컴퓨터가 융통성을 발휘해서
  • 2byte 인 char보다 size가 큰 4byte짜리 int로 타입을 맞춰주고 나서 계산한 것이다.
  • 문제 발생. char는 원래 문자였는데 연산 후에 int 정수로 바뀌어서 출력됨

 

 

 

 

 

문자로 출력되기를 원하면 (char)형으로 형 변환 작업 필요

 

 

 

 


 

 

 

 

4. 상수

  • == 항상 같은 값을 가지는 수
  • final

 

 

 

 

 

 

 

  • final 도 출생지에 따라서 그 출생지에서만 사용 가능 { }
  • 다른 { }에서는 final 서로 가능하다.

 

 

 

변수 끝 -

 

 

 

 

 


 

 

 

 

2. 연산자

 

## Check Point 

  • [  산술 연산자 && 비교 연산자 && 논리 연산자 && 삼항 연산자 ]

 

 

 

 

 

  • 1 + 1 = 2; 산술
  • 1 < 2 = true; 비교
  • true && false = false : 논리

 

 

 - 삼항연산자

  • 지금 하는 이유는 뒤에서 만났을 때 당황하지 말라고
  • [ 조건식 ? 참일 때 : 거짓일 때 ]
  • [ A ? B : C ]

 

 

 

 

 


 

 

 

 

 

 

제어문 시작( 조건문, 반복문 )

 

 

 

3. 조건문 

 

## Check Point 

  • [  if // else if // switch ]

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

4. 반복문 

 

 

## Check Point 

  • [ for // while // do-while ]

 

 

 

 

 

 

 


 

 

 

 

5. 배열

 

 

## Check Point 

  • [ int 배열 // double 배열 // String 배열   ]

 

 

 

 

 

 

 

 


 

 

 

 

 


review


2차원 배열을 설명할 때
3x3 / 4x4 이런 식으로 그려서
설명해주시는 분들이 대부분이었는데
메모리에서의 관점으로
어떻게 관리되는지를 설명해주셔서 좋았다.
각 행마다 열의 길이가
다른 경우도 생성이 되고 어떻게 연결되어있고
접근하는지 이해할 수 있었다.

2차원 배열을 마치고 총 복습 시간을 가졌는데

서로 다른 타입의 연산을 못하는 것이 원칙이지만
컴퓨터가 마음대로 형 변환을 해서
타입을 맞춰준 뒤 연산을 실행해주고 
그 결과 값을 반환해주는 부분이 새로웠다.
char 'A' + 1 해서 출력하면 B가 나올 줄 알았는데
66이 출력됐던 부분 ㅎㅎ 실수 안 하려면 잘 체크해놓자

배열까지 진도가 나갔다.
이제 다음 시간부터는 메소드 - 객체 이런 부분 나갈 거 같다.
많이 봤던 내용들이라 익숙했지만 배울 때마다
새로운 부분이 있고, 몰랐던 부분이 있다.
이래서 자만하지 말고 기본기를 확실히 다져야 하는 것 같다.