본문 바로가기
Programming/Java

[Java/자바] 배열

by 코딩하는 랄로 2023. 9. 24.
728x90

배열이란

배열이란 동일한 타입을 가지는 여러개의 데이터를 담는 집합 자료형이다. 배열에 저장되어 있는 데이터를 배열의 원소(element)라고 하고, 원소가 배열에 저장되어 있는 위치를 배열의 인덱스(index)라고 한다.

 

그렇다면 자바에서는 배열은 어떻게 선언하고 어떻게 요소를 저장하고 접근하는지 알아보겠다.

 

 

 

배열의 선언 및 초기화

자바에서 배열을 선언할 때에는 선언할 배열이 어떠한 타입의 데이터를 가지는 집합인지를 명시해주어야 한다. 그렇기 때문에 일반 변수를 선언해주는 방식과 유사하다. 

 

하지만 배열은 데이터들의 집합이기 때문에 이를 뜻하는 대괄호([])를 아래의 예제와 같이 데이터 타입과 함께 명시해주는 것이 자바에서 배열의 선언이다.

 

int[] arr;  //데이터타입[] 배열명

 

위의 예제에서 int형 배열 arr를 선언'만' 해주었다. 아직 arr 배열에 int형 데이터를 저장하기 위한 메모리에 어떠한 공간도 할당되지 않은 것이다.

 

이 공간을 할당해주기 위해서, 초기화를 해주어야 하고 자바에서는 new 키워드를 통해서 다음과 같이 배열을 초기화해준다.

 

int[] arr = new int[10]; //데이터타입[] 배열명 = new 데이터타입[배열크기];

 

이렇게 되면 int형 타입의 데이터를 10개 저장할 수 있는 arr 배열이 선언 및 초기화 된 것이다. new 키워드를 통해 배열은 선언할 경우 자바에서는 배열의 초기 데이터를 0으로 모두 채워넣는다.(int형 배열의 경우)

 

하지만 선언과 동시에 자신이 원하는 데이터로 넣기를 원한다면 다음과 같이 배열을 선언할 수 있다.

 

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

 

이 때 arr는 크기가 10인 배열을 자동으로 초기화함과 동시에 {}안에 있는 데이터들로 바로 채워넣게 되는 것이다.

 

 

 

배열의 접근

배열의 각 데이터에 접근하기 위해서는 위에서 언급한 인덱스를 통해 접근할 수 있다. 인덱스란, 간단하게 말해 배열에서의 위치를 뜻한다. 

 

예를 들어, 1부터 10까지의 값이 순서대로 초기화되어 있는 배열 arr가 있다고 가정한다면 숫자 10은 배열의 9번째 위치에 저장되어 있는 것이다.

 

여기서 배열의 10번째 위치가 아닌 9번째 위치인 이유는 배열의 인덱스는 0번부터 시작하기 때문이다. 즉, arr 배열의 인덱스 0번에 저장되어 있는 데이터는 1이 되는 것이다.

 

 

 

배열의 길이

자바에서는 배열의 길이를 반환하는 메서드를 제공하고 있다. 자바에서 기본적으로 배열로 선언된 변수에게 제공되기 때문에 .(dot)을 통해 메서드의 접근하여 사용하면 된다.

int[] arr = new int[10];
int size = arr.length; // size <= 10

 

메서드를 통해 배열의 길이를 사용하는 이유로는 배열의 길이를 모르기 때문일 수도 있지만 코드를 보다 유연하게 만들기 위해서 이다. 

 

예를 들어, 크기가 10인 int형 배열의 arr를 선언하고 출력(순서대로 한번, 역순으로 한번)을 한다고 가정해보자. 단순히 배열의 크기를 하드코딩한다면 다음과 같이 코드를 작성할 수 있다.

 

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

for(int i = 0; i < 10; i++) {
	System.out.println(arr[i]);
}

for(int i = 9; i >= 0; i--) {
	System.out.println(arr[i]);
}

 

이런 코드에서 모종의 이유로 arr 배열의 크기를 두 배로 늘려 초기화해야 하는 상황이 발생했을 때, 배열 초기화 부분만이 아닌 for문 또한 수정을 해주어야 한다.

 

하지만 arr.length를 통해 다음과 같이 코드를 작성해준다면,

 

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

for(int i = 0; i < arr.length; i++) {
	System.out.println(arr[i]);
}

for(int i = arr.length - 1; i >= 0; i--) {
	System.out.println(arr[i]);
}

 

위와 같은 상황(arr 2배로 초기화)에서 arr 배열의 초기화 부분만 수정을 하여도 되는 것이다. 이렇게 짧은 코드에서는 모든 코드를 확인하면서 수정하는 것이 어렵지 않을 지라도 긴 코드에서는 놓치는 부분도 생기고 코드를 수정하는데 소요되는 시간도 길어진다.

 

그렇기 때문에 코드를 작성할 때에는 숫자의 직접적인 사용을 줄이는 것이 코드의 유연성을 높여주는 좋은 코딩이 되는 것이다.

728x90

'Programming > Java' 카테고리의 다른 글

[자바/Java] 메소드1 - 정의  (0) 2023.09.28
[자바/Java] var 변수 선언  (0) 2023.09.28
[Java/자바] 반복문 - break, continue  (0) 2023.09.23
[Java/자바] 반복문 - while, do while  (0) 2023.09.23
[Java] 반복문 - for  (0) 2023.09.23