Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

ki-sd 님의 블로그

[2026-03-12] 배열(Array)의 구조적 한계와 메모리 관리 본문

JavaStudy

[2026-03-12] 배열(Array)의 구조적 한계와 메모리 관리

ki-sd 2026. 4. 13. 17:41

수많은 데이터를 하나의 변수명으로 그룹화하여 관리하는 가장 기본적인 자료구조인 배열의 원리를 파헤쳤다.

 

1. 배열의 메모리 할당(Memory Allocation) 메커니즘

  • 자바에서 배열은 기본형 변수처럼 스택(Stack) 영역에 값을 통째로 저장하지 않는다.
  • int[] arr = new int[5];를 선언하면, arr라는 참조 변수는 스택에 생성되지만 실제 5개의 정수가 들어갈 공간은 힙(Heap) 영역에 연속적인 블록 형태로 크게 할당된다. 그리고 스택의 arr 변수는 이 힙 메모리의 시작 **주소값(Reference)**을 저장하게 된다.
  • 메모리 공간이 연속적이기 때문에 데이터를 탐색하고 읽어오는 속도가 매우 빠르다는 구조적 장점을 이해했다.

2. 고정 길이(Fixed-length)의 특성

  • 배열은 한 번 크기를 지정하여 힙 영역에 할당받으면, 그 크기를 런타임 중에 절대 늘리거나 줄일 수 없다. (불변성)
  • 만약 더 큰 공간이 필요하다면, 기존 배열을 늘리는 것이 아니라 아예 더 큰 새로운 배열을 new로 생성한 뒤, 기존 데이터를 복사(System.arraycopy 등)하여 옮겨 담아야 한다는 자원 관리의 엄격함을 배웠다.

3. 인덱스 관리와 예외 처리 (Exception)

  • 배열의 각 요소에 접근하는 인덱스(Index)는 항상 0부터 시작하여 배열길이 - 1로 끝난다.
  • 범위를 벗어난 인덱스에 접근하려 할 때 발생하는 **ArrayIndexOutOfBoundsException**을 직접 유발해보고 해결했다. 배열을 반복문으로 순회할 때는 하드코딩된 숫자가 아닌, 배열 객체 내부에 기본적으로 존재하는 arr.length 속성을 조건식으로 사용하여 예외 발생을 원천 차단하는 안전한 코딩 스킬을 습득했다.