Arrays in Java

DZone Java · 2026.08.02

Java 배열의 핵심 개념과 실무적 의미

Java 배열은 동일한 타입의 요소를 메모리 상에 연속적으로 배치하는 가장 기본적인 자료구조다. 배열의 가장 큰 특징은 고정 크기(fixed-size) 컨테이너라는 점이다. 선언 시 크기가 결정되며, 이후 변경이 불가능하다. 저장 가능한 타입은 int, double, char 같은 기본형(primitive type)부터 Object와 같은 참조형까지 포함되며, 단 하나의 배열 안에서는 모든 요소가 동일한 타입이어야 한다.

int[] scores = new int[5];          // 기본형 배열
String[] names = new String[3];     // 참조형 배열

배열의 메모리 연속성이 왜 중요한가

4년차 이상 백엔드 개발자라면 단순히 "배열은 인덱스로 접근한다"는 수준을 넘어, 메모리 연속성이 주는 성능적 이점을 이해해야 한다. 배열은 요소들이 메모리 상에 연속적으로 배치되기 때문에 CPU 캐시 효율이 매우 높다. 반복 순회 시 캐시 미스(cache miss)가 적어 ArrayListLinkedList보다 원시 성능이 뛰어난 경우가 많다.

반면 ArrayList는 내부적으로 배열을 사용하지만, 크기가 초과되면 새로운 배열을 할당하고 복사하는 오버헤드가 발생한다. 성능 민감한 로직, 예를 들어 대량 데이터 처리나 버퍼 관리 같은 상황에서는 배열의 정적인 특성이 오히려 장점이 될 수 있다.

실무에서 배열 vs 컬렉션 선택 기준

백엔드 개발에서 배열을 직접 쓰는 경우는 많지 않지만, 선택 기준을 명확히 아는 것이 중요하다.

  • 크기가 고정적이고 변경이 없는 경우: 배열이 더 가볍고 빠르다
  • 빈번한 추가/삭제가 필요한 경우: ArrayList, LinkedList 등 컬렉션이 적합하다
  • 다차원 구조가 필요한 경우: 2차원 배열(int[][])은 행렬 연산이나 격자 기반 로직에서 직관적이다
  • 타입 안정성과 유연성이 필요한 경우: 제네릭 컬렉션이 유리하다
// 2차원 배열 예시 - 격자형 데이터 처리
int[][] matrix = new int[3][3];
matrix[0][1] = 42;

특히 외부 라이브러리나 I/O 처리, 바이트 조작이 필요한 영역(예: 파일 스트림, 네트워크 소켓)에서는 byte[] 배열이 여전히 핵심적으로 사용된다.

정리

  • Java 배열은 고정 크기, 동일 타입, 메모리 연속 배치라는 세 가지 특성을 가지며, 이를 이해하는 것이 성능 설계의 출발점이다
  • 메모리 연속성으로 인해 순차 접근 성능이 뛰어나지만, 크기 변경이 불가능하므로 요구사항에 따라 컬렉션과 명확히 구분해 사용해야 한다
  • 바이트 조작, 버퍼, 행렬 연산 등 저수준 처리 영역에서는 배열이 여전히 실무의 핵심 도구다
Source
DZone Java
원문 보기 →
← 목록으로 돌아가기