728x90
값 형식과 참조 형식의 결정적인 차이점은 인스턴스의 대입이 일어날때 뚜렷해진다.
struct (구조체) : 깊은 복사 => 값 형식
class (클래스) : 얕은 복사 => 참조 형식
값 형식은 값 전체가 메모리 (스택) 영역에서 복사가 된다.
따라서 구조체를 복사할 경우 내용 전체가 복사된다고 생각하면 된다.
참조 형식은 값은 힙 영역에 있고 스택영역에 힙 영역을 가리키는 주소값을 저장하는 형식이다.
밖에서 호출을 할경우 스택영역의 주소값을 호출하고, 해당 주소(힙영역)에 있는 값을 불러온다.
따라서 클래스 복사할 경우 주소값을 복사하는것이기 때문에, 원치 않는 수정이 일어날 수 있다.
1. 일반적으로 모든 사용자 정의 타입은 클래스로 구현한다.
2. 선택적으로 구조체로 구현한다.
3. 참조형식은 가비지 컬렉터에 부담을 줄 수 있으므로, 이런 부하를 피해야 하는 경우에 구조체로 구현한다.
* 큰 용량의 인스턴스를 구조체로 구현하면 메모리를 많이 잡아먹게된다. 1000byte의 구조체가 1개라면 복사시 2000byte 용량을 먹기 때문. 복사하는 메서드를 여러번 호출하게 되면 성능은 바닥을 향할 것이다.
클래스로 구현하게 되면 1000byte는 한번만 메모리를 차지하고, 나머지는 해당 메모리의 주소값만 기억하면 된다.
매서드를 호출할 때마다 주소값만 복사한다면 당연히 성능이 좋아질 것이다.
728x90
'프로그래밍 > C#' 카테고리의 다른 글
.NET Framework(닷넷 프레임워크)에 대해 알아보자 (1) | 2023.09.16 |
---|---|
[C#] 일반화 프로그래밍_ <T>의 마법 (0) | 2023.06.23 |
튜플이란? 튜플 사용법 (0) | 2023.06.23 |
깊은 복사와 얕은 복사 (0) | 2023.06.23 |
[C#] Nullable 형식 (0) | 2023.06.22 |