22. 04. 15 - 이차원 배열, 총 복습(변수, 연산자, 조건문, 반복문, 배열)
다차원 배열
- 2차원 배열만 해볼 예정
배열을 안다는 것은?
- 배열을 생성할 줄 알아야 하고 // int[][] a = new int[3][3];
- 배열에 접근할 줄 알아야 // a[0][0];
- 배열을 아는 것이다.
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]);
- 출력을 반복문으로 할 수 있다는 것은
- 입력도 반복문으로 할 수 있다는 것이다! - 다음 시간에 ㅎㅎ
- 접근해서 출력까지 하는 법을 알았다. 이제 배열에 값을 입력해보자
4. 배열에 값 입력하기
- 2차원 배열의 길이는 생략 가능 - int[3][3] - 2번째 숫자는 생략 가능
- 3칸은 생성 – 각각의 칸들이 관리하는 배열은 아직 모르는 상태!
- a [ 0 ] -> a에 0번째 칸에 접근 - a[ 0 ]
- 이 칸에 3칸짜리 배열 넣어준다 - = new int[ 3 ];
a[ 0 ] = new int[ 3 ];
- 이 코드는 오른쪽 저 작업을 의미하는 것이다.
- 3칸짜리 배열 만들어서 그 주소 값을 a배열 [ 0 ] 번째 칸에 넣어주는 것
new int[ 3 ]으로 만든 배열에 접근해보자
- a[0][0] = 10;
- 코드 해석
- a를 찾아가서 (a에는 빨간색 배열 주소 값 저장되어있다.) -
- 그 주소 값으로 빨간색 배열 0번째 칸을 찾아가고 – (0번째 칸은 파란 배열 주소 값 저장되어있다.)
- 그 주소 값으로 파란색 배열 찾아가서 0번째 칸에다가 – 10을 대입
입력을 반복문으로 하는 것은 다음 시간에 이어서!
객체 시작
기본 세팅 및 실습 순서
- main 안 넣어준 클래스(PrintTest)에서 메서드( test() ) 생성하고
- main 넣어준 클래스( Main )에서 그 메서드 실행할 것이다
- PrintTest 객체 만들어주고 그 객체로 메소드 호출
- import PrintTest !
오늘은 객체 이해 여기까지만 살펴보기~
- 만들어 놓은 Class를 데이터 타입으로 이용해서 - 객체를 만들 수 있고
- 그렇게 생성한 객체를 이용해서 메서드를 호출 - 사용할 수 있다.
총 복습 시작
- 변수
- 연산자(산술, 논리, 문자)
- 조건문(if, else if, switch)
- 반복문(for, while, do-while)
- 배열
1. 변수
## Check Point
- [ 변수 명명 규칙 && 기본 자료형 && 문자형 && 상수형 ]
1. 변수 명명 규칙
- 클래스 이름은 대문자로 시작
- 메소드 이름, 변수명은 소문자로 시작
- 띄어쓰기가 있는 여러 단어의 경우, 붙여쓰고 대문자로 변경
- 상수 변수 이름은 모두 대문자로 작성 ex) PI
- 상수변수 이름이 여러 개의 단어인 경우, _ 를 사용 ex)MAX_SIZE
- PascalCase
- camelCase
2. 기본 자료형일 때만 기본 값을 넣어준다.
- 기본 자료형일때만 기본 값을 넣어준다~
- 참조형 변수의 기본값은 null;
- 개발자는 모든 걸 다 외울 필요는 없다. 어떤 게 존재하는구나
- 이런 게 있구나 저런 게 있구나
- 이런 상황에서 이런 걸 사용하는 구나를 알아야 한다.
- ex) 기본자료형의 사이즈를 외우면 좋지만 필요에 따라서 검색해서 확인한 후 맞춰서 사용하기.
3. 문자형
- 컴퓨터가 문자를 읽어 들이는 법
- ‘A’를 숫자로 기억하고 있다가
- ‘A’를 출력해달라고 하면 – 대치되어있던 숫자를 -> A로 변환해서 출력해준다.
- 대치된 숫자는 아스키코드!
정말로 65로 저장되어있는지 확인 TEST
- char ch = ‘A’;
- System.out.println(ch+1);
- 해주면 출력 66 나온다. 이유는?
- 65로 저장되어있는 것에 +1해준것이라서 형 변환으로 확인해보자!
- 숫자 확인은 int형으로 형 변환해서 확인 - (int)ch; => 65;출력
- 문자 확인은 char형으로 형 변환해서 확인 - (char)ch; => 'A'출력
Q : int로 형 변환을 안 해줬는데 왜 B가 안 나오고66이 나오는 건가요?
- int + long을 더하기 가능할까요? 된다
- 되긴 됐지만 사실 안 되는 것이다.
- 컴퓨터는 타입이 다르면 연산을 못하는 것이 맞다.
- 근데 결과는 잘 나왔네?
- 어떻게 된 거냐면은 int + long 명령을 하면 컴퓨터는 바로 계산을 못하기 때문에
- "계산 못해 끝"이 아니라 컴퓨터 마음대로 타입을 똑같이 만들어버린 다음에 계산을 한다.
- size 큰 애를 따라가는 것이 보통의 처리
- long + long으로 계산해준 것이다.
- 이 개념 이해하고 다시 코드로 돌아간다.
- ch + 1
- char + int 더한 것이다.
- 그냥 못하는 것이 아니라 컴퓨터가 융통성을 발휘해서
- 2byte 인 char보다 size가 큰 4byte짜리 int로 타입을 맞춰주고 나서 계산한 것이다.
- 문제 발생. char는 원래 문자였는데 연산 후에 int 정수로 바뀌어서 출력됨
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이 출력됐던 부분 ㅎㅎ 실수 안 하려면 잘 체크해놓자
배열까지 진도가 나갔다.
이제 다음 시간부터는 메소드 - 객체 이런 부분 나갈 거 같다.
많이 봤던 내용들이라 익숙했지만 배울 때마다
새로운 부분이 있고, 몰랐던 부분이 있다.
이래서 자만하지 말고 기본기를 확실히 다져야 하는 것 같다.