참조 포스팅
자바는 다양한 컬렉션 프레임워크를 제공하여 복잡한 자료구조를 다루는데 도움을 줍니다. 그럼에도 불구하고, 기본 배열(Array)의 사용은 자주 볼 수 있습니다. 이 번 포스팅에서 자바의 기본 배열을 사용하는 예제와 특징을 정리하고, 컬렉션 프레임워크와도 비교를 살펴보도록 하겠습니다.
배열의 선언 및 초기화 방법은 위와 같이 있습니다.
배열은 원시형 타입의 변수들을 담고 관리할 수 있는 데이터 구조이기 때문에, 크기를 반드시 지정해줘야 합니다.
초기화1
방식으로 초기화 후에는 배열 내 요소들이 모두 int의 기본형인 ' 0 ' 으로 초기화 됩니다.
즉, 반드시 크기가 지정되어야 하기 때문에 컴파일 시점에 컴파일러에 의해 원시 타입의 기본값으로 초기화 되는 것입니다.
원시타입 기본형
- int : 0
- double : 0.0
- char : '\0' or '\u0000'
- boolean : false
참조형 변수의 경우 'null' 값으로 초기화 됩니다.
초기화3
방식은 선언과 함께 할당해야만 초기화가 가능합니다.
int[] a3;
a3 = {4, 5, 6} // 컴파일 에러
int[] a3 = {4, 5, 6} // 초기화
위와 같은 원리로 메서드의 매개변수가 int[ ] 타입인 경우, 해당 매개변수에 값을 초기화3
방식을 사용하면 컴파일 에러가 발생합니다.
public static void method(int[] x){ ... }
public static void main(String[] args){
method({1,2,3}); // 컴파일 에러 발생.
method(new int[]{1,2,3}); // 가능
method(new int[3]); // 가능
}
초기화4
방식은 데이터를 각 index에 직접 넣어주는 방식이고, 초기화5
방식은 Arrays 라는 자바 util을 사용하여 일괄적으로 모든 요소를 하나의 값으로 초기화 할 때, 주로 사용합니다.
배열은 생성 시 크기를 지정하며, 생성 이후에 크기 변경이 불가능합니다. 이로 인해 요소를 추가하거나 제거하는 작업이 번거롭습니다.
배열 안에는 동일한 타입의 요소들을 저장합니다. 예를 들어, String 타입의 배열은 String 요소만 담을 수 있습니다.
배열의 각 요소는 순차적인 인덱스 값을 가지며, 해당 인덱스를 사용하여 각 요소에 접근이 가능합니다.
배열의 요소들은 메모리 안에 연속적으로 배치됩니다. 이를 통해 인덱스를 기반한 빠른 접근이 가능합니다.
배열 내 특정 인덱스에 저장된 요소에 접근하는데 걸리는 시간은 O(1) 입니다. 따라서 배열은 빠른 조회를 위해 사용됩니다.
위에서 언급한 대로 배열은 생성과 동시에 크기를 고정하기 때문에 요소를 추가와 제거하는데 제약이 있습니다.
원시 타입의 데이터들도 배열에 담아서 관리가 가능합니다.
다차원 배열을 구현할 수 있어 다차원 데이터 관리에 용이합니다.
기본 배열 : 배열은 생성 시 크기가 지정되며, 이후 변경이 불가능합니다. 크기를 변경하려면 새로운 배열을 생성한 뒤 기존의 배열을 복사하여 넣어주는 방법 밖에 없습니다.
컬렉션 프레임워크 : 대부분의 컬렉션 클래스는 크기의 가변성을 제공합니다. 요소를 동적으로 추가하거나 제거가 가능하며, 크기를 자동으로 추가하거나 제거합니다.
기본 배열 : 간단한 데이터의 저장 및 조회에 유용하지만, 요소의 추가, 삭제 등의 복잡한 기능들을 직접 구현해야 합니다.(자바에서 제공하는 Arrays 라는 배열 util이 있긴 합니다.)
컬렉션 프레임워크 : 다양한 데이터 구조들을 지원하며, 요소 추가, 삭제, 검색, 정렬 등의 기능들을 표준화된 방법으로 제공합니다.
기본 배열은 조회 성능
이 좋으며, 원시 타입
관리가 가능하여 메모리 사용 성능이 좋습니다. 또한, 다차원 배열
을 지원하여 다차원 데이터 표현 시 사용 가능하다는 장점이 있습니다.
하지만, 배열은 생성과 동시에 크기 고정
이 발생하여 새로운 요소 추가 / 제거
하기에 상대적으로 번거롭다는 단점이 있습니다. 또한, 컬렉션 프레임워크에 비해서 자바에서 지원하는 기능이 다양하지는 않습니다.
결론적으로,
간단한 원시 타입의 데이터를 조회 목적으로 사용, 다차원 데이터 관리하는 경우에 사용하면 좋은 데이터 구조입니다.