Language/C#

[c#] classType vs structType vs recordType

@예민한 방구석여포 힘히힘 2021. 8. 15. 11:48
반응형

큰 분류를 한다면,

ClassType(CT)와 StructType(ST)는 mutable이고, RecordType(RT)는 immutable이다.

 

mutable : 변하기 쉬운

immutable : 불편

 

 

*ref/value type classification

class: reference type

struct: value type

record: reference type

 

class reference type은 에 저장, ST는 value type으로 스택에 저장됨.

//메모리 사용 차이//

스택은 그때그때 메모리에 들어갔다가 빠져서 부담 X 

힙은 가비지 콜렉터 가 메모리 정리 안해줄시에 메모리 차지 하고 있음.

 

 

*ref/value type classification

상속 지원 여부:

class: yes

struct: no

record: yes!

record에서 with을 사용한 복사는 상속된 속성의 전체 복사를 처리함. 

 

 

*Member Properties:

class: 제한 없음 : 변경가능(mutable)

struct: 제한 없음 : 변경가능(mutable)

record: 변경불가능 (immutable)

그러나 속성에 public setter가 있는 경우 변경 가능

 

왜 이렇식으로 변화했을 까? record는 C# 9.0에서 개념을 도입하였기에 class와 struct로는 해결하지 못한 문제점이 있었던 것 같습니다.

mutable의 경우 여러코드가 엮어있다보니 데이터가 꼬이기도 하고, 값이 변형되기도 하면서 전체적인 코드를 검토해야하는 문제가 발생한다. 

immutable는 객체를 thread로부터 안전하게 만들고 메모리 관리를 개선하는 데 도움이 되고, 코드를 더 읽기 쉽고 유지 관리하게 쉽게 만듭니다.
따라서 record라는 형식 "불변성(immutable)"을 지원하게 됩니다.

 

 

 

 

 

 

 

 

출처:

 

https://hoven.in/cs-lang/records-in-cs9.html

 

https://epdev.tistory.com/38?category=951598 

 

https://www.infoworld.com/article/3607372/how-to-work-with-record-types-in-csharp-9.html