개발일지
자바 기초 정리 - 스택(Stack) / 힙(Heap) 메모리, 가변 매개변수
동훈
•
2026-06-30 09:10
조회수
5
들어가며
가상융합기술 아카데미 백엔드 첫 수업을 통해 자바 기본 문법을 복습했다.
그중에서도 헷갈리기 쉬웠던 스택/힙 메모리 구조와 가변 매개변수를 중심으로 정리해보았다.
스택(Stack) 메모리 vs 힙(Heap) 메모리
자바에서 변수와 데이터는 모두 메모리에 저장되며, 이 메모리는 크게 스택과 힙으로 나뉜다.
이 구조를 이해하면 참조 타입이 왜 존재하는지도 자연스럽게 이해할 수 있다.
힙(Heap) 메모리
힙 메모리는 크기가 크고, 유동적인 데이터를 저장하는 공간이다.
저장 대상
참조 자료형의 실제 데이터 (String, 배열, 객체 등)
크기가 고정되지 않은 데이터
특징
메모리 크기가 크다
여러 곳에서 공유가 가능하다
주소를 통해 접근하기 때문에 스택보다 속도가 느리다
관리 방식
자바의 가비지 컬렉터(GC)가 자동으로 관리한다
더 이상 사용되지 않는 데이터는 자동으로 제거된다
예시:
String name = "backend";
"backend" → 힙 메모리에 저장
name 변수 → 스택에 생성되고 힙 주소를 저장
스택(Stack) 메모리
스택 메모리는 일시적으로 사용하는 메모리 공간이다.
저장 대상
기본 자료형 값 (int, double 등)
참조 자료형의 주소값
특징
접근 속도가 빠르다
메서드 단위로 생성되고 종료 시 함께 제거된다
사용이 끝나면 즉시 메모리에서 사라진다
핵심 정리
실제 데이터는 힙에 저장된다
스택에는 해당 데이터의 주소가 저장된다 (참조 타입)
정리
구분 스택(Stack) 힙(Heap)
저장 내용 기본값, 주소값 실제 데이터
속도 빠름 느림
크기 작음 큼
수명 메서드 종료 시 제거 GC에 의해 관리
접근 범위 제한적 공유 가능
가변 매개변수
메서드를 정의할 때 매개변수의 개수가 달라질 경우,
기존에는 오버로딩을 여러 개 만들어야 했다.
이 문제를 해결하기 위해 가변 매개변수를 사용할 수 있다.
선언 방법
public static int sum(int... nums) {
int total = 0;
for (int num : nums) {
total += num;
}
return total;
}
int... nums는 내부적으로 배열(int[])로 처리된다.
사용 방법
sum(1, 2, 3);
sum(10, 20, 30, 40);
sum();
콤마(,)로 자유롭게 개수를 전달할 수 있다
배열을 직접 전달하는 것도 가능하다
주의사항
가변 매개변수는 반드시 마지막에 위치해야 한다
public void test(String name, int... nums)
하나의 메서드에는 하나만 사용할 수 있다
오버로딩이 되어 있는 경우, 더 구체적인 메서드가 우선 호출된다
add(int a, int b)
add(int... a)
add(1, 2) → 일반 메서드 호출
느낀 점
처음에는 String 같은 것도 스택에 저장되는 줄 알았는데, 실제 데이터는 힙에 저장되고 변수에는 주소만 저장된다는 점이 살짝 헷갈렸다.
참조 타입이 왜 필요한지 스택과 힙의 구조를 통해 이해할 수 있었고, 단순 문법보다 내부 동작을 같이 이해하는 것이 중요하다고 느꼈다.
앞으로
객체와 배열을 배우면서 힙 메모리 개념을 더 깊게 이해할 필요가 있다.
이후에는 코드 작성 시 메모리 구조를 함께 고려하는 연습을 해볼 예정이다.