본문 바로가기
🤓 면접

[개발자면접] 스택과 힙 영역 차이, Call By Value & Call By Reference

by 비타민찌 2022. 11. 25.
728x90

1. 스택과 힙 영역 차이

- 스택(stack) 영역

정적 메모리를 저장하는 공간 입니다. 값 형식을 저장하고, 지역변수와 매개변수가 저장되는 영역 입니다. 한 코드 블록 안에서 생성된 변수들은 블록이 닫히면 메모리에서 제거됩니다. 스택은 컴파일 타임에 크기가 결정됩니다.

 

- 힙(heap) 영역

동적 메모리를 저장 합니다. 전역 변수를 다루고, 참조 형식을 저장하는 영역이고, 자동으로 제거되지 않으며, 가비지 컬렉터(GC)가 관리해 줍니다. 런 타임에 크기가 결정됩니다.

자바 메모리 구조(static, stack, heap)

(해당 게시글에 힙과 스택 메모리에 데이터가 저장되는 나름 자세한 과정이 있습니다.)

 

2. Call By Value & Call By Reference

 

Call By Value는 값에 의한 호출로, 보통 함수 호출 시 스택에 메모리가 생성되는데,

함수가 호출할 때 전달되는 변수 값을 ‘복사’해서 사용합니다.

복사를 한 것이기 때문에 함수 내에서 파라미터를 사용해도 실제 존재하는 값은 변경되지 않고, 메모리 공간을 소모합니다.

 

Call By Reference는 참조에 의한 호출로, 보통 함수 호출 시 변수의 ‘참조값’을 함수 파라미터로 전달합니다.

그래서 전달받은 값을 변경할 경우 원본도 같이 변경이 되는데, 자바에서는 원본 객체 자체를 변경시킬 수 없습니다.

 

3. JAVA Primitive Type(기본형) / Reference Type(참조형)

기본형(int, long..)은 Stack 영역에 메모리가 저장되고, 사용하기 전에 선언되어야 하고, null이 불가능합니다.

참조형은 new로 객체를 생성해서 사용하고, Heap 영역에 메모리가 저장되고요, Garbage Collector가 돌면서 사용하지 않거나 사용 완료한 메모리를 해제합니다. null이 가능합니다.

728x90

댓글