배열
배열 생성 방법
타입[] 변수이름 = new 타입[길이]
길이가 0인 배열을 생성할 수 있다
JVM이 모든 배열의 길이를 별도로 관리하고, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.
배열은 한 번 생성하면 길이를 변경할 수 없다.
공간이 부족해 배열의 길이를 변경해야 하는 경우 더 큰 길이의 새로운 배열을 생성한 다음 기존 배열의 값을 새로운 배열에 복사한다
유효한 인덱스 범위를 넘어서면 ArrayIndexOutOfBoundsException이라는 예외가 발생한다
코드를 변경해 배열의 길이가 바뀔 때, '배열이름.length'는 for문에서 알아서 값을 update 해준다.
배열의 초기화
배열 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화 됨
선언과 생성을 동시에 하는 경우 new int[]를 생략할 수 있음
int[] score = new int[]{50, 60, 70, 80, 90};
int[] score = {50, 60, 70, 80, 90}; // new int[]를 생략할 수 있음
- 선언과 생성을 따로 하는 경우 new int[]를 생략할 수 없음
int[] score;
score = new int[]{50, 60, 70, 80, 90};
// 아래 코드는 에러 발생
score = {50, 60, 70, 80, 90};// new int[]를 생략할 수 없음
- 다음 코드는 모드 길이가 0인 배열을 생성함
int[] score = new int[0];
int[] score = new int[]{};
int[] score = {}; // new int[]가 생략됨
배열의 요소를 출력하는 두 가지 방법
- 반복문
int[] iArr = {100, 95, 80, 65, 60};
for (int i = 0; i < iArr.length; i++) {
System.out.print(iArr[i] + ", ");
}
System.out.println();
- Arrays.toString(배열이름) 메서드 사용
int[] iArr = {100, 95, 80, 65, 60};
// [100, 95, 80, 65, 60] 이 출력된다
System.out.println(Arrays.toString(iArr));
iArr(참조변수)을 출력하면 타입@주소 형태로 출력된다
- 예외적으로 char 배열은 println 메서드로 출력하면 각 요소가 구분자없이 그대로 출력된다
char[] chArr = { 'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd가 출력된다.
배열의 복사
C와 동일
System.arraycopy()를 사용하면 지정된 범위의 값들을 한 번에 통째로 복사하기 때문에, for문을 통해 복사하는 것 보다 효율적이다
System.arraycopy(num, 0, newNum, num.length);
// num[0] 에서 newNum으로 num.length 개의 데이터를 복사
String 클래스 배열과 char 배열
- String 클래스만 다음과 같이 큰 따옴표만으로 간략이 표현하는 것이 허용됨
String[] name = new String[3];
name[0] = new String("Kim");
name[0] = "Kim";
name[1] = new String("Park");
name[1] = "Park";
name[2] = new String("Yi");
name[2] = "Yi";
String 클래스는 char 배열에 기능을 추가한 것이다.
String 클래스의 주요 메서드
char charAt(int index) // 문자열에서 해당 index에 있는 문자를 반환한다
int length() // 문자열의 길이를 반환한다.
String substring(int from, int to) // 문자열에서 해당 범위에 있는 문자열을 반환한다(to는 범위에 포함되지 않음)
- (1,4)면 4는 범위에 포함되지 않는다
boolean equals(String str) // 문자열의 내용이 같은지 확인한다
char[] toCharArray() // 문자열을 문자배열(char[])로 변환해서 반환한다
다차원 배열
2차원 배열
// 타입[][] 변수이름;
int[][] score = new int[4][3]; // 4행 3열
// 타입 변수이름[][];
int score[][];
// 타입[] 변수이름[];
int[] score[];
2차원 배열의 초기화
int[][] arr = new int[][] { {1, 2, 3}, {4, 5, 6} };
int[][] arr = { {1, 2, 3}, {4, 5, 6} }; // new int[][]가 생략됨
// 가독성을 위해 다음과 같이 줄 바꿈을 해주는 것도 좋다
int[][] arr = {
{1, 2, 3},
{4, 5, 6}
}; // new int[][]가 생략됨
2차원 배열의 길이
int score[5][3]에서 length 값은?
score.length 의 값은 5
score[0].length, score[1].length, score[2].length, score[3].length, score[4].length 의 값은 3
1차원 배열처럼 범위 기반 for문을 사용하면 안 된다
// 에러 발생
for (int i : score) { // 에러, 2차원 배열의 각 요소는 1차원 배열
sum += i;
}
- 2차원 배열을 1차원 배열로 받은 후, 1차원 배열 level에서 범위 기반 for문을 사용하자
for (int[] tmp : score) { // score의 각 요소(1차원 배열 주소)를 tmp에 저자
for (int i : tmp) { // tmp는 1차원 배열을 가리키는 참조변수
sum += i;
}
}
가변 배열
자바는 2차원 이상의 배열을 '배열의 배열'의 형태로 처리한다는 사실을 위에서 확인했다.
2차원 이상의 다차원 배열을 생성할 때 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성할 수 있다
- 유동적인 가변 배열을 구성할 수 있음
int[][] score = new int[5][];
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
score[3] = new int[2];
score[4] = new int[3];
참조) Java의 정석 3rd edition(남궁성, 도우출판)
'Programming Language > Java' 카테고리의 다른 글
[Java] 07. OOP - 상속과 접근제어자 (0) | 2024.03.12 |
---|---|
[Java] 06. OOP - 클래스와 객체 (0) | 2024.03.12 |
[Java] 04. 변수 (0) | 2024.03.12 |
[Java] 03. 화면에서 입력받기 (0) | 2024.03.12 |
[Java] 02. 자바로 프로그램 작성하기 (0) | 2024.01.20 |