안녕하세요, 여행벌입니다.
오늘은 가장 많이 사용하는 자료구조인 배열을 생성하는 방법, 데이터를 저장 및 참조하는 방법, 특성에 대해서 알아보겠습니다.
배열 (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;
}
배열은 인스턴스 이므로 메소드 호출 시 전달할 수 있고, 자바에서 지원해주는 다양한 메소드에 인자로 전달해 다양한 기능을 사용할 수 있습니다.
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] #18 자바 오버라이딩, @Override, final (0) | 2020.06.15 |
---|---|
[JAVA] #17 자바 상속 (Inheritance) (0) | 2020.06.12 |
[JAVA] #15 자바 StringBuilder 클래스 특징 및 메소드 정리 (0) | 2020.06.01 |
[JAVA] #14 자바 String 클래스 특징 및 메소드 정리(2) (0) | 2020.05.28 |
[JAVA] #13 자바 String 클래스 특징 및 메소드 정리(1) (0) | 2020.05.28 |