안녕하세요, 여행벌입니다.

 오늘은 가장 많이 사용하는 자료구조인 배열을 생성하는 방법, 데이터를 저장 및 참조하는 방법, 특성에 대해서 알아보겠습니다.


배열 (Array)

 배열은 '자료형이 같은 둘 이상의 값'을 저장할 수 있는 메모리 공간을 의미합니다.

, 자료형이 같은 여러 가지 값들을 모아서 저장할 때 사용하는 자료구조입니다.

 

 자바에서의 배열은 클래스로 정의되어있으므로, 우리는 인스턴스를 생성해서 배열을 이용할 수 있습니다. 또, length 라는 인스턴스 변수를 지원해줘서 배열의 길이도 쉽게 알 수 있습니다.

배열의 선언 및 초기화

자료형[ ] 변수명 = new 자료형[크기];    // 더 선호하는 방식
자료형 변수명[ ] = new 자료형[크기];
package Hello;

public class test{
	public static void main(String args[]) {
		int[] list = new int[5];
		int list2[] = new int[5];
	}
}

  두 가지 방법으로 선언할 수 있고, list과 list2 모두 자료형 int 를 5개 저장할 수 있는 배열을 선언했습니다. 배열의 길이는 고정되어 있으므로, 처음에 선언할 때 배열의 크기를 자바에게 알려줘야 됩니다.

package Hello;

public class test{
	public static void main(String args[]) {
		int[] list = new int[] {1,2,3,4,5};
		int[] list2 = {1,2,3,4,5};
	}
}

 배열을 선언과 동시에 초기화할 수도 있습니다.

 위와 같이 배열을 선언하면서 동시에 초기화할 수 있습니다. 자바에서 배열의 크기를 5로 자동으로 인식하므로 크기를 전달하지 않아도 문제가 없습니다.

배열의 값 저장, 참조

  그럼 이렇게 선언한 배열에 값을 저장하거나 참조하려면 어떻게 해야 될까요?

 

 배열은 인덱스를 이용해서 참조할 수 있고, 인덱스는 0번 부터 시작합니다!

 

 즉, 5개를 저장할 수 있는 배열을 선언하면 5개의 메모리 공간이 생기고 인덱스로 참조할 수 있습니다. 이때, 인덱스는 0번부터 시작해 4번에서 끝이 납니다.

package Hello;

public class test{
	public static void main(String args[]) {
		int[] list = new int[5];
		list[0] = 1;
		list[1] = 2;
		list[2] = 3;
		list[3] = 4;
		list[4] = 5;
	}
}

 크기가 5인 배열을 선언해 맨 앞부터 1, 2, 3, 4, 5를 저장했습니다.

 배열은 0번 인덱스부터 시작하므로, 다음과 같이 메모리 공간에 데이터들이 위치하고 있는 것을 예측할 수 있습니다.

 

 그러면, 2차원 혹은 3차원 배열은 어떻게 선언할까요? 1차원 배열과 크게 다르지 않습니다.

package Hello;

public class test{
	public static void main(String args[]) {
		int[][] list = new int[2][3];
	}
}

 2차원 배열은 위의 그림과 같이 2행 3열로 이루어졌습니다. 마찬가지로 데이터를 참조할 때는 인덱스를 이용해 다음과 같이 참조할 수 있습니다.

package Hello;

public class test{
	public static void main(String args[]) {
		int[][] list = new int[2][3];
		list[0][0] = 1;
		list[0][1] = 2;
		list[0][2] = 3;
		list[1][0] = 4;
		list[1][1] = 5;
		list[1][2] = 6;
	}
}

 자바는 다른 언어와 달리 다음과 같은 배열 특성을 가지고 있습니다.

package Hello;

public class test{
	public static void main(String args[]) {
		int[][] list = { { 1, 2, 3}, { 4, 5}, {6} };
	}
}

 다음과 같이 2차원 배열을 선언하면 3행 3열의 배열이 선언될까요?? 아니면 채워지지 않은 공간은 메모리가 할당되지 않을까요??

 정답은 오른쪽 그림입니다!  자바는 배열의 가로길이가 행 별로 다른 2차원 배열을 생성할 수 있습니다. 즉, 초기화를 잘못하여 예상과는 다른 길이의 배열이 만들어지지 않도록 주의해야 합니다.

배열의 참조 값과 메소드

 위에서 우리는 배열 인스턴스를 생성해 사용한다고 말씀드렸습니다. 따라서, 당연히 메소드 호출 시 참조 값으로 배열을 전달할 수 있습니다. int 형 배열을 전달받아 합을 구하는 메소드를 만들어보겠습니다.

	int sumOfAry(int[] list) {
		int result = 0;
		for(int i = 0; i < list.length; i++)
			result += list[i];
		return result;
	}

 배열은 인스턴스 이므로 메소드 호출 시 전달할 수 있고, 자바에서 지원해주는 다양한 메소드에 인자로 전달해 다양한 기능을 사용할 수 있습니다.


 

+ Recent posts