남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다.
배열
- 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
int score1, score2, score3, score4, score5;
int[] score = new int[5];
배열의 선언과 생성
배열의 선언
- 배열을 다루기 위한 참조변수의 선언
선언방법 | 선언 예 |
타입[] 변수이름; (주로 자바에서 많이 사용) | int[] score; String[] name; |
타입 변수이름[]; (주로 C언어에서 많이 사용) | int score[]; String name[]; |
타입[] 변수이름; // 배열을 선언 (배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]; // 배열을 생성 (실제 저장공간을 생성)
int[] score; // int 타입의 배열을 다루기 위한 참조변수 score 선언
score = new int[5]; // int 타입의 값 5개를 저장할 수 있는 배열 생성
배열의 인덱스
- 각 요소(저장공간)에 자동으로 붙는 (일련)번호
* 인덱스의 범위는 0부터 '배열길이-1' 까지
int[] score = new int[5] //길이가 5인 int 배열 (인덱스는 0 , 1, 2, 3, 4 )
배열의 길이
- 배열이름.length ( int형 상수 )
int[] arr = new int[5]; // 길이가 5인 int 배열
int tmp = arr.length; // arr.length의 값은 5이고, tmp에 5가 저장
* 배열은 한번 생성하면 (실행 동안) 그 길이를 바꿀 수 없다.
예를들어 int[5]가 있다고 가정하면, integer * 5 = 4 * 5 = 20byte
배열은 연속적이어야 하기 때문에 20byte 공간을 찾아야함.
공간에 배열을 만들었는데, 공간이 더 필요해서 int[10]으로 늘린다고 하면
integer * 10 = 4 * 10 = 40 byte, 즉 20byte가 추가적으로 필요!
처음에 int[5] 메모리공간 뒤에 20byte가 비어있다는 보장이 X
따라서 공간이 부족하면 40byte 빈 공간으로 옮겨야하는데, 이건 X
공간이 부족하면 새로운 배열을 만들고 기존 배열을 복사하여 사용
int[] score = new int[6]
for(int i=0; i<6; i++)
System.out.println(score[i]); //배열의 모든 요소 출력
배열의 길이를 6 > 5로 변경하게 되면
for문 조건식도 변경해줘야함. 변경을 안하게되면 배열의 인덱스 범위를 초과하여 에러 발생
따라서
for (int i=0; i<score.length; i++) // 배열의 길이로 조건식을 변경하면 배열의 길이가 변경되도 따로 변경할 필요 X
배열의 초기화
- 배열의 각 요소에 처음으로 값을 저장하는 것
int[] score = new int[5]; // 길이가 5인 int형 배열 생성
score[0] = 50; // 각 요소에 직접 값을 저장
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
int[] score = new int[] {50,60,70,80,90};
int score = {50,60,70,80,90}; // new int[] 생략 가능 ! 보통 이렇게 작성
int[] score;
score = {50,60,70,80,90} ; // 에러 왼쪽의 경우 new int[] 생략 X
score = new int[] {50,60,70,80,90}; // OK
배열의 출력
int[] iArr = {100, 95, 80, 70, 60};
System.out.println(iArr); //배열을 가리키는 참조변수 iArr의 값을 출력 [I@14318bb와 같은 형식 문자열 출력
단, char[] chArr = {'a', 'b', ' c', 'd'};
System.out.println(chArr); // 정상 출력 가능 (캐릭터 배열의 경우에는 가능하다고함)
for(int i=0; i<iArr.length; i++)
System.out.println(iArr[i]);
또는
System.out.println(Arrays.toString(iArr)); // 배열 iArr의 모든 요소를 출력
Arrays라는 클래스에있는 toString메소드를 사용 > 배열의 내용을 문자열로 만들어서 반환
댓글