1. 배열(array)이란?
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 '배열(array)'이라고 한다. 배열을 사용하면 많은 양의 데이터를 손쉽게 다룰 수 있다.
배열은 같은 타입의 여러 변수를
하나의 묶음으로 다루는 것
중요한 것은 배열은 '같은 타입'이어야 한다는 것이며, 서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.
int[] score = new int[5]; // 5개의 int 값을 저장할 수 있는 배열을 생성한다.
* 변수 score는 배열을 다루는데 필요한 참조변수일 뿐 값을 저장하기 위한 공간은 아니다.
2. 배열의 선언과 생성
배열을 선언하려면, 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열을 의미하는 대괄호[]를 붙이면 된다.
// 타입[] 변수이름;
int[] score;
String[] name;
배열을 선언한 다음에는 배열을 생성해야 한다. 배열을 생성하기 위해서는 연산자 'new'와 함께 배열의 타입과 길이를 지정해 주어야 한다.
int[] score; //배열을 선언(배열을 다루기 위한 참조변수 선언)
score = new int[5]; // 배열을 생성(실제 저장공간을 생성)
int[] score = new int[5]; // 배열의 선언과 생성을 동시에 진행
public class Prev {
public static void main(String[] args) {
int[] score;
score = new int[8];
System.out.println(score);
System.out.println(score[0]);
System.out.println(score[1]);
System.out.println(score[2]);
System.out.println(score[3]);
System.out.println(score[4]);
score[2] = 100;
score[3] = 50;
System.out.println("=================");
System.out.println(score[0]);
System.out.println(score[1]);
System.out.println(score[2]);
System.out.println(score[3]);
System.out.println(score[4]);
// score의 타입 : int[]
// score[0]의 타입 : int
System.out.println("=================");
for ( int i = 0 ; i < score.length ; i++) {
System.out.println(score[i]);
}
}
}
3. 배열의 길이와 인덱스
생성된 배열의 각 저장공간은 '배열이름[인덱스]'의 형식으로 접근한다.
* 인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
인덱스(index)'의 범위는 0부터 '배열길이-1'까지
배열에 값을 저장하고 읽어오는 방법은 변수와 같다. 단지 변수이름 대신 '배열이름[인덱스]'를 사용한다.
int[] score = new int[5]; // 길이가 5인 int 배열
score[3] = 100; // 배열 score의 4번째 요소에 100을 저장한다.
int value = score[3]; // 배열 score의 4번째 요소에 저장된 값을 읽어서 value에 저장
배열은 index로 상수 대신 변수나 수식도 사용할 수 있다.
for (int i = 0 ; i < 5 ; i++) {
score[i] = i * 10;
}
배열을 다룰 때 주의할 점은 index의 범위를 벗어난 값을 index로 사용하지 않아야 한다. 유효하지 않은 값을 index로 사용하면, 에러(ArrayIndexOutOfBoundsException)가 발생한다.
- 예제 ArrayEx1.java
import java.util.Arrays;
public class ArrayEx1 {
public static void main(String[] args) {
int[] score = new int[5];
int k = 1;
score[0] = 50;
score[1] = 60;
score[k+1] = 70;
score[3] = 80;
score[4] = 90;
int tmp = score[k+2] + score[4]; // int tmp = score[3] + score[4]
// for문으로 배열의 모든 요소를 출력한다.
for (int i = 0 ; i < 5 ; i++) {
System.out.printf("score[%d]:%d%n", i, score[i]);
}
System.out.printf("tmp:%d%n", tmp);
// System.out.printf("score[%d]:%d%n", 7, score[7]); // index의 범위를 벗어난 값
// 1 int = 4byte * 20억
// 80억 byte >> 800만 KB >> 8000MB >> 8GB
System.out.println(args.length);
// args.length = 10; >> 배열의 길이는 상수이다.
String[] strs = new String[3];
System.out.println(strs[0]);
System.out.println(strs[1]);
System.out.println(strs[2]);
int[] arrays3 = new int[] {10, 15, 11, 12};
for (int j = 0 ; j < arrays3.length ; j++) {
System.out.println(arrays3[j]);
}
// 선언, 할당
int[] arr2;
arr2 = new int[3];
int[] arr3;
arr3 = new int[] {10, 11, 12, };
for (int j = 0 ; j < arr3.length ; j++) {
System.out.print(arr3[j] + ",");
}
System.out.println();
System.out.println(Arrays.toString(arr3));
}
}
4. 배열의 길이
배열의 길이는 값을 저장할 수 있는 공간의 개수다.
배열의 길이는 int 범위의 양의 정수(0도 포함)이어야 한다. >> 약 20억
- 배열이름.length
자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다. 배열은 한 번 생성하면 길이를 변경할 수 없기 때문에 '배열이름.length'는 상수다.
* 배열길이는 값을 읽을 수만 있을 뿐 변경할 수 없다.
int[] score = new int [5];
for (int i = 0 ; i < 5 ; i++) {
for (int i = 0 ; i < score.length ; i++) { // 위와 같음
public class Prev2 {
public static void main(String[] args) {
int[] score = new int[5];
for (int i = 0 ; i < score.length ; i++) {
score[i] = (i + 1) * 4;
}
int[] score2 = score; // score에 담겨있는 '주소'값을 int[] 타입의 score2에 할당
score2[3] = 100;
for (int i = 0 ; i < score.length ; i++) {
System.out.println(score[i]);
}
System.out.println(score[3]);
System.out.println(Integer.MAX_VALUE + 1);
System.out.println(1_000_000 * 1_000_000 * 1_000_000 * 1_000_000 * 1_000_000);
}
}
- 배열의 길이 변경하기
배열의 길이를 변경하는 법
1. 더 큰 배열을 새로 생성한다.
2. 기존 배열의 내용을 새로운 배열에 복사한다.
참고문헌 : 남궁성(2016), Java의 정석, 도우출판