Struct와 Class는 비슷한 기능을 하고 있지만 확실하게 다른 구조를 가지고 있다.
기능을 사용할 때 확실히 알고 쓰는거랑 모르고 쓰는거는 큰 차이가 있기 때문에
이 둘의 대한 개념을 설명하고자 한다.
Struct란?
영어 뜻 그대로 구조체 형식이며 관련 기능을 캡슐화 할 수 있다.
구조체 형식은 값 형식이다.
Class란?
Class는 Struct와 비슷한 기능을 하지만 상속이 가능하며
클래스 형식은 참조 형식이다.
Struct와 Class의 차이점
우선 테스트를 진행 할 Class와 Struct를 만들었다. 둘은 현재 이름과 나이, 이름과 나이를
표시해주는 함수를 공통적으로 가지고 있으며 이를 통해 둘의 차이점을 알아보고자 한다.
선언한 Class와 Struct를 Main부분에서 사용하는 부분이다.
이름과 나이에 값을 넣어주고 함수를 실행해보면
똑같은 값이 나오게 된다. 그렇기 때문에 Struct와 Class에 기능을 확실하게 구분 못하고
넘어가는 경우가 생기고만다.
이 코드는 전과 달리 새롭게 만든 각각의 클래스와 구조체에서 전 구조체와 클래스
값을 전달 받은 후 다시 값을 설정하고 있는 부분이다.
결과 값을 확인해보면
구조체에서는 확연하게 다른 값이 나왔지만
클래스에서는 둘의 값이 똑같이 적용되어 나왔다.
이러한 차이는 Class의 참조 형식과 Struct의 값 형식이라는
특징으로부터 나오게 된다.
Struct는 스택 메모리 영역에 할당되기 때문에 값 자체를 가지고 있고
Class는 힙 메모리 영역에 할당되기 때문에 값 자체가 아닌 주소를 가지고 있다.
그렇기 때문에 위의 코드에서 차이가 나는 이유는 Struct는 값을 저장하기 때문에
원래의 구조체 값을 받아와도 주소 값을 받아오는 것이 아니라 값을 받아오는 것이기
때문에 서로 영향이 없다.
하지만 Class는 값을 저장하는 것이아닌 주소를 저장하기 때문에 아무리 새로운 클래스를
만들었다 해도 전의 Class값을 받아버리면 새로운 클래스에 원래 클래스 주소를 넣어주는 것이기
때문에 서로 같은 주소를 바라보게 된다. 그렇게 된다면 아무리 새로운 클래스에서 값을 다르게
넣는다고 해도 결국 같은 주소를 바라보고 있기 때문에 원래의 클래스와 새로운 클래스 둘 다 값이
동일하게 변경된다.
그렇기 때문에 결과 값이 저러한 형식으로 나오게 되는 것이다.
요약
Struct와 Class의 차이점은 Struct는 스택 메모리 영역에 값을 할당하지만
Class는 힙 메모리 영역에 주소를 할당합니다. 그렇기 때문에 힙 영역을
처리해주는 가비지 컬렉터의 영향을 Struct는 받지 않기 때문에 프로그램 속도
를 향상 시킬 수 있고 Class는 Struct와 달리 상속을 할 수 있다는 장점이 있습니다.
'TIL > C#' 카테고리의 다른 글
[C#] 가비지 컬렉터 회피 전략 (0) | 2023.10.30 |
---|---|
[C#] 가비지 컬렉터 (0) | 2023.10.27 |
[C#] 접근제한자의 종류와 차이점 (0) | 2023.10.25 |
ref와 out의 차이점 (0) | 2023.10.24 |
[C#] 디버그를 효율적으로 하는 방법 (1) | 2023.10.17 |