← 질문 목록
#21깊이 0
메모리 관점에서 값 타입과 참조 타입의 선택 기준은 무엇인가?
고르는 기준은 셋이다. 데이터의 수명, 크기, 그리고 바꿀 일이 있는지다.
아래 구조는 흔히 쓰는 관념 모델이다. 실제 배치는 언어와 런타임 최적화에 달렸다.
- 힙 영역참조 타입의 실제 데이터 (예: 인스턴스, 배열)
- 스택 영역값 타입의 데이터 직접 저장 / 참조 타입의 주소값(포인터) 저장
값 타입은 변수 자리에 값이 그대로 들어간다. 지역 변수면 스택에 놓이지만 객체의 필드나 배열 원소면 힙에 놓인다. 값으로 넘기면 복사된다 — 참조로 넘기는 문법이 있는 언어는 예외다.
참조 타입은 힙에 실제 데이터를 두고 변수에는 참조만 담는다. 그래서 데이터가 크거나 여러 곳이 같은 것을 봐야 할 때 맞다.
작고 수명이 짧고 바꿀 일이 없는 데이터는 값 타입이 유리한 편이다. GC가 훑을 것이 줄어든다.
크거나 여러 곳에서 같은 인스턴스를 공유하며 상태를 바꿔야 하면 참조 타입이다. 넘길 때 주소만 복사하니 전달은 싸다. 대신 힙에 쌓이고 GC가 그만큼 일한다.