java-school logo
Last Modified 2013.12.7

배열

배열은 동일한 자료형의 값을 여러개 담을 수 있다.
변수상자가 여러개 이어져서 붙어있는 그림
값들은 배열요소에 하나씩 저장되어 있다.
배열요소에 접근하기 위해서는 인덱스(배열요소에 0부터 순서대로 붙여진 숫자)와 [](꺽쇠)를 사용한다.
주의할 점은 자바에선 배열도 객체라는 사실이다.
따라서 new키워드로 배열 객체를 생성해야 배열을 사용할 수 있게 된다.

1차원 기본 자료형 배열

1차원 int형 배열을 사용하는 방법이다.
int[] arr = null;//int는 배열 요소의 데이터 형, []하나는 1차원 배열

arr = new int[5];//5는 배열의 크기,객체가 생성되면 5개의 배열 요소는 0으로 초기화

arr[0] = 1;//첫 번째 배열 요소에 1 할당
arr[1] = 2;//두번째 배열 요소에 2 할당
arr[2] = 3;//세번째 배열 요소에 3 할당
arr[3] = 4;//네번째 배열 요소에 4 할당
arr[4] = 5;//마지막 배열 요소에 5 할당(배열크기가 5이므로 인덱스 4가 마지막)
다음은 배열 변수 arr 를 선언함과 동시에 1,2,3,4,5를 배열에 담는 코드이다.
결과는 위 예제와 같다.
int[] arr = {1, 2, 3, 4, 5};

1차원 참조 자료형 배열

기본 자료형에 대한 예제를 보았으니 참조 자료형에 대한 배열의 예를 보자.
String[] arr2 = null;//String은 배열 요소의 데이터 형, []하나는 1차원 배열

arr2 = new String[4];//4는 배열의 크기,객체가 생성되면 배열 요소는 null 로 초기화

arr2[0] = "자바";//첫 번째 배열 요소에 "자바" String 객체의 참조값을 할당
arr2[1] = "스쿨";//두번째 배열 요소에 "스쿨" String 객체의 참조값을 할당
arr2[2] = "java";//세번째 배열 요소에 "java" String 객체의 참조값을 할당
arr2[3] = new String("school");//마지막 요소에 "school" String 객체의 참조값을 할당
다음은 배열 변수 arr2 를 선언함과 동시에
"자바","스쿨","java","school" 참조값을 배열에 담는 코드이다.
결과는 위 예제와 같다.
String[] arr2 = {"자바", "스쿨", "java", "school"};

2차원 기본 자료형 배열

2차원 이상의 배열은 배열 요소에 배열 객체의 참조값이 할당된다.
2차원 배열은 수학의 행렬과 비슷하다.
첫 번째 꺽쇠가 행을 두번째 꺽쇠는 열을 의미한다.
int[][] arr3 = null;//2차원 배열이니 꺽쇠가 2개

arr3 = new int[4][];//두번째 꺽쇠의 배열 크기를 나중에 지정할 수 있다.

arr3[0] = new int[3];
arr3[1] = new int[3];
arr3[2] = new int[3];
arr3[3] = new int[3];

arr3[0][0] = 1;
arr3[0][1] = 2;
arr3[0][2] = 3;

arr3[1][0] = 4;
arr3[1][1] = 5;
arr3[1][2] = 6;

arr3[2][0] = 7;
arr3[2][1] = 8;
arr3[2][2] = 9;

arr3[3][0] = 10;
arr3[3][1] = 11;
arr3[3][2] = 12;
다음은 배열 변수 arr3 를 선언함과 4행 3열의 배열에 차례로 1부터 12까지 배열에 담는 코드이다.
결과는 위 예제와 같다.
int[][] arr3 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} };
자바의 배열은 생성하고 난 다음에 배열의 크기를 늘이거나 줄일 수 없다는 단점이 있다.
배열의 인스턴스 변수 length는 배열의 크기(배열 요소의 수)를 저장하고 있는데 배열 객체가 생성될 때 정해지고 이후 변하지 않는다.
자주 하는 혼동을 막기 위해 강조하면,
length에 저장되는 수는 단순히 배열 요소의 갯수이지, 결코 의미있는 값을 가지고 있는 배열 요소가 몇개인지를 나타내는 수가 아니다.
의미있는 값을 가진 배열 요소가 몇개나 있는지를 나타내는 변수는 배열에 없다.
a.length, a[0].length, a[1].length 값은?
int[][] a; = null;
a = new int[4][];
a[0] = new int[3];
a[1] = new int[7];
System.out.println(a.length);//4
System.out.println(a[0].length);//3
System.out.println(a[1].length);//7

main 메서드에 String[] 배열를 인자로 전달하는 방법

Test.java
public class Test {
	public static void main(String[] args) {
		System.out.print(args[0] + "년 ");
		System.out.print(args[1] + "월 ");
		System.out.print(args[2] + "일");
	}
}
소스를 컴파일하고 다음과 같이 실행한다.
C:\ Command Prompt
C:\javaApp>javac Test.java

C:\javaApp>java Test 2013 12 31
2013년 12월 31일