- 참조 형식과 값 형식에 대해 설명해주세요.
값 형식은 변수가 실제 데이터를 저장하는 데이터 유형이다. 값을 직접 메모리에 저장한다. >> 스택 메모리에 할당 , 빠르게 접근 가능 , 기본 데이터 타입들 , 구조체가 있다. 참조 형식은 실제 데이터가 저장된 메모리 위치(참조)를 저장하는 데이터 유형이다. >> 힙 메모리에 할당, 더 큰 메모리 공간을 사용하며 동적 메모리 할당에 적합 , 실제 데이터의 참조(메모리 주소)가 복사된다.
- 메모리에서 스택과 힙의 차이점에 대해 설명해주세요.
스택은 컴파일 시간에 크기가 결정되는 변수들을 저장하는데 사용되며, 힙은 런타임에 크기가 결정되거나 변경될 수 있는 데이터를 저장하는 데 사용된다.
- 1번과 2번 질문의 답안을 기반으로 struct와 class의 차이점에 대해 설명해주세요.
값 형식 vs. 참조 형식
struct:
값 형식(Value Type)이다.
스택(Stack)에 할당된다.
변수에 struct를 할당하면 실제 데이터의 복사본이 생성됩니다.
즉, struct를 다른 변수에 할당하거나 함수에 전달할 때 데이터가 복사된다.
구조체의 복사본을 수정해도 원래 구조체에는 영향을 미치지 않는다.
class:
참조 형식(Reference Type)이다.
힙(Heap)에 할당된다.
변수에 class 객체를 할당하면 객체의 참조(메모리 주소)가 저장된다.
즉, 객체를 다른 변수에 할당하거나 함수에 전달할 때 데이터의 참조가 전달된다.
객체의 참조를 수정하면 해당 객체의 모든 참조가 영향을 받는다.
메모리 할당
struct:
주로 스택에 할당되지만, struct가 클래스의 필드로 사용되면 힙에 할당될 수 있다.
스택에 할당되므로 할당과 해제가 빠르다.
class:
항상 힙에 할당된다.
힙에 할당되므로 할당과 해제가 상대적으로 느리다.
가비지 컬렉터에 의해 관리되므로 메모리 해제 시점이 불확실하다.
상속
struct:
상속을 지원하지 않는다.
다른 struct나 class로부터 상속받을 수 없으며, 상속할 수도 없다.
인터페이스는 구현할 수 있다.
class: 상속을 지원한다.
다른 클래스에서 상속받을 수 있으며, 상속할 수도 있다. 인터페이스도 구현할 수 있다.
기본 생성자
struct:
기본 생성자가 자동으로 제공된다.
매개변수가 없는 생성자를 정의할 수 없다.
필드를 초기화하지 않아도 된다.
class:
기본 생성자를 정의할 수 있다.
매개변수가 없는 생성자를 포함하여 여러 생성자를 정의할 수 있다.
필드는 명시적으로 초기화하거나, 생성자에서 초기화해야 한다.
- 얕은 복사와 깊은 복사의 차이점은 무엇인가요?
깊은 복사 (Deep Copy) : 깊은 복사는 객체와 그 객체가 참조하는 모든 하위 객체들을 재귀적으로 복사한다. 이는 원본 객체와 복사본 객체가 서로 독립적인 구조를 가지게 됨을 의미한다.
얕은 복사(Shallow Copy) : 얕은 복사는 객체의 최상위 수준만 복사하며, 객체가 참조하는 하위들(즉, 중첩된 객체들)은 원본 객체와 동일한 참조를 갖게 된다. 이는 객체의 복사본이 원본 객체와 동일한 하위 객체들을 참조하게 됨을 의미된다.
- 박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요.
언박싱(Unboxing) : 언박싱은 참조 형식을 값 형식으로 변환하는 과정이다. 힙에 저장된 객체의 값을 스택에 있는 값 형식 변수로 복사한다.
메모리 관리 : 힙에 할당된 객체는 가비지 컬렉터에 의해 관리된다. 따라서 많은 박싱 작업은 가비지 컬렉션 부담을 증가시킬 수 있다.
박싱(Boxing) : 박싱은 값 형식을 참조 형식으로 변환하는 과정이다. 값 형식을 객체(Object)로 감싸서 힙(Heap) 메모리에 저장하고, 이 객체의 참조를 반환한다.
'Record > TIL' 카테고리의 다른 글
[Unity] 플레인 vs 쿼드 (0) | 2024.07.11 |
---|---|
[Unity] 터레인 (0) | 2024.07.10 |
[C#] 상속과 인터페이스 (3) | 2024.07.08 |
[Unity] 블렌더 트리로 애니메이션 4방향 작업하기 (3) | 2024.07.05 |
[Unity] 유니티로 픽셀 이미지(스프라이트) 가져올때 깨지거나 화질구려질때 해결방법 (0) | 2024.07.04 |