■ 개요
○ 오늘 계획
■ 면접 질문 준비 2
13. 참조 형식과 값 형식에 대해 설명해주세요.
14. 메모리에서 스택과 힙의 차이점에 대해 설명해주세요.
-
스택 (Stack)
- 메모리에서 임시 데이터를 저장합니다.
- 값 형식 데이터가 주로 저장됩니다.
- LIFO (Last In, First Out) 방식으로 데이터가 관리됩니다.
- 빠르게 할당 및 해제됩니다.
- 크기가 비교적 작으며, 컴파일 시 크기가 정해집니다.
- 예시: 메서드 호출 시 로컬 변수, 함수 호출 스택
-
힙 (Heap)
- 메모리에서 동적 데이터를 저장합니다.
- 참조 형식 데이터가 저장되며, 메모리의 주소를 통해 접근합니다.
- 필요에 따라 메모리를 할당하고 해제하므로 느립니다.
- 크기가 상대적으로 크고, 런타임에 관리됩니다.
- 예시: new 키워드로 생성된 객체
15. struct와 class의 차이점에 대해 설명해주세요.
16. 얕은 복사와 깊은 복사의 차이점은 무엇인가요?
-
얕은 복사 (Shallow Copy)
- 객체의 주소만 복사합니다.
- 복사된 객체는 원본 객체와 같은 메모리를 참조합니다.
- 원본 데이터가 변경되면 복사본도 영향을 받습니다.
- 예시: MemberwiseClone 메서드
-
깊은 복사 (Deep Copy)
- 객체의 내용 전체를 복사하여 새로운 메모리 공간에 할당합니다.
- 복사된 객체는 원본과 독립적으로 동작합니다.
- 원본이 변경되어도 복사본에 영향을 미치지 않습니다.
- 예시: ICloneable 인터페이스를 구현하거나 수동으로 복사
17. 박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요.
- 박싱 (Boxing)
- 값 형식 데이터를 참조 형식 객체로 변환하는 과정입니다.
- 스택에 존재하던 값 형식이 힙에 할당된 객체로 복사됩니다.
- 예시: int 값을 object 타입에 할당할 때
int value = 10; // 스택에 저장
object obj = value; // 힙에 박싱된 값 저장
- 언박싱 (Unboxing)
- 박싱된 객체(참조 형식)를 다시 값 형식으로 변환하는 과정입니다.
- 힙에 있는 데이터를 다시 스택으로 복사합니다.
object obj = 10; // 힙에 박싱된 값
int value = (int)obj; // 스택으로 언박싱
- 메모리 관점 요약
- 박싱: 값 → 힙에 객체로 복사 (메모리 할당 비용 발생)
- 언박싱: 힙의 객체 → 값으로 복사 (추가 형변환 비용 발생)