[Java] 8. 배열
*배열 예제코드는 다음 글에 게시
1. 일차원 배열
같은 타입의 변수 여러개를 하나로 묶어서 다루는 것
# 배열 선언
int[] array;
→ 여기서 array는 배열이 아닌 배열을 다루기 위한 참조변수이다.
# 배열 생성
array = new int[10];
→ 실제로 값을 저장할 수 있는 공간을 만든 것이다.
→ 배열을 생성하기 위해 new라는 예약어를 반드시 사용해야 한다.
배열 내 각 요소에 접근하기 위해 인덱스를 사용하며,
각 요소의 인덱스는 순서대로 0부터 부여된다.
또한, 배열은 생성됨과 동시에 값을 저장하지 않으면 각 타입의 기본값으로 자동 초기화된다.
※ 에러 : ArrayIndexOutOfBoundsException
인덱스의 범위가 유효하지 않다는 것으로 인덱스의 범위를 넘어가는 값을 사용하면 발생한다.
Ex) int arr = new int[5]; ... arr[5] = 32; //에러 발생 : arr의 인덱스 범위는 0~4이다.
# 배열의 길이
양의 정수 값을 가지며, 배열은 생성 후 길이를 변경할 수 없으므로 길이도 변하지 않는다.
배열의 길이는 배열이름.length를 통해 알 수 있으며, 이 값은 상수이다.
+) 길이 변경방법 : 더 큰 배열을 생성하여, 기존 배열의 내용을 새 배열에 복사한다. (아래 내용 추가)
# 배열 초기화
① 각 요소의 값을 지정
int[] age = new int[5];
age[0] = 10; age[1] = 20; age[2] = 30; age[3] = 40; age[4] = 50;
② 생성과 초기화를 동시에 하기 (new 생략 가능)
int[] age = new int[] {10, 20, 30, 40, 50};
int[] age = {10, 20, 30, 40, 50};
③ 생성 후 초기화하기 (new 생략 불가능)
int[] age;
age = new int[]{10, 20, 30, 40, 50};
# 배열 출력하기
① 반복문 사용
for(int i=0; i<age.length; i++) {
System.out.println(age[i]);
}
② 향상된 for문 사용하기
for (int array : age) {
System.out.println(array);
}
③ Arrats.toString()
System.out.println(Arrats.toString(age));
# 배열 복사하기
배열은 생성 후 길이를 변경할 수 없으므로 새로운 배열을 만든 후,
이전 배열을 복사하여 더 큰 저장공간을 확보할 수 있다.
방법 1. for문 이용하기
Ex) int[] age = {10, 20, 30, 40, 50};
int[] newAge; 1) 새로운 배열을 만든다.
for(int i=0; i<age.length; i++) { 2) 기존 배열의 내용을 새로운 배열에 옮긴다.
newAge[i] = age[i];
}
age = newAge; 3) 기존의 참조변수가 새 배열을 가리키도록 한다.
방법 2. System.arraycopy( )이용하기
(방법1의 for문을 아래와 같이 바꾸면 된다.)
Ex) System.arraycopy(age, 0, newAge, 0, age.length);
→ System.arraycopy(기존배열, 복사 시작 인덱스, 새배열, 복사 위치 인덱스, 복사 데이터 개수);
2. String 배열
# 타입별 변수의 기본값
boolean → false
char → '\u0000'
byte, short, int → 0
long → 0L
float → 0.0f
double → 0.0d or 0.0
참조형 변수 → null
String배열에 저장되는 것은 객체의 주소이며, 참조형 배열은 객체 배열이라고도 한다.
즉, String[] fruit = {"apple", "banana", "grape"}; 와 같이 선언했을 때,
fruit는 배열의 주소를 가리키며, 각 배열에는 객체의 주소가 저장되므로 실제 값은 새로운 객체에 저장되어 있다.
# String클래스의 주요 메서드
- char charAt(int index) : 문자열에서 해당되는 인덱스의 문자를 반환
- int length( ) : 문자열의 길이를 반환
- String substring(int from, int to) : 문자열 내에 해당 범위의 문자열을 반환
- boolean equals(String str) : 문자열의 내용이 같은지 확인
- char[] toCharArray( ) : 문자열을 문자배열(char[])로 변환하여 반환
3. 다차원 배열
2차원 배열
주로 테이블 형태의 데이터를 저장하며, 일차원 배열을 선언할때 대괄호([ ])만 하나 더 붙여주면 된다.
행과 열로 구성되어 있으며, 배열에 배열이 추가된 형태라고 생각하면 된다.
일반 배열은 배열이름.length를 통해 배열 요소를 알아냈으나,
다차원 배열에서는 배열이름[인덱스].length를 통해 알 수 있다는 점에 유의해야 한다.
가변 배열
전체 배열의 차수 중 마지막 차수의 길이를 지정하지 않고 생성한 배열
Ex. int[ ][ ] student = new int[10][ ];
따라서, 가변 배열 생성 시 각 행마다 다른 길이의 배열을 생성할 수 있다.