ki-sd 님의 블로그
[2026-03-12] 배열(Array)의 구조적 한계와 메모리 관리 본문
수많은 데이터를 하나의 변수명으로 그룹화하여 관리하는 가장 기본적인 자료구조인 배열의 원리를 파헤쳤다.
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 속성을 조건식으로 사용하여 예외 발생을 원천 차단하는 안전한 코딩 스킬을 습득했다.
'JavaStudy' 카테고리의 다른 글
| [2026-03-16] 메모리 영역과 static 키워드의 메커니즘 (0) | 2026.04.13 |
|---|---|
| [2026-03-13] 다차원 배열의 실전 응용과 알고리즘 설계 (0) | 2026.04.13 |
| [2026-03-11] 중첩 반복문과 2차원 데이터 처리의 시각화 (0) | 2026.04.13 |
| [2026-03-10] 반복문의 핵심 메커니즘 - for와 while (0) | 2026.04.13 |
| [2026-03-09] 2026-03-09 : 종합 예제와 알고리즘의 기초 설계 (0) | 2026.04.13 |
