예전에 구조체는 값을 묶어 관리하는 거고
클래스는 행동까지 (함수까지) 묶어 관리하는거라고 했는데
거짓말이다.
구조체도 함수를 가질수있다.
C++ 에서는 구조체랑 클래스랑 기본 접근제한자를 제외하고 완전 동일하고
C# 에서 구조체는 좀더 가볍게 관리가능한 클래스로 보면된다.
근데 왜 이런거짓말을 했느냐하면 C에서 전통적인 구조체(struct) 는 값만 묶어 관리 할수있었는데 여기서 발전되어 Class가 나온것이기때문에..
전통적으로 이렇게 구분하기 때문이다. 설명하기도 편하고.. 암튼
1, C#에서의 구조체와 클래스
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/structs
여기 잘 설명되어있는데 간단하게 설명하면
1. 구조체는 값 형식이다
: 값형식이다. Change 함수를 거쳐도 Main의 ss의 name은 변경되지 아니하였다,
값형식이기에 함수로 넘어갈때마다 복사 과정이 걸릴것.
2. new (동적할당)없어도 된다, int double처럼,
: 동적할당이 아닌 정적할당 으로도 생성이 가능하다, 동적할당보다 정적이 빠르고 관리가 필요없어서
Class보다 속도, 메모리 면에서 이점이 있다.
3. 클래스 상속이 불가능, 상속받는것도 하는것도 불가능
: 말그대로
4. 인터페이스 구현은 가능
: 말그대로
즉 가볍게 만들만한 녀석이면 구조체를 이용하면 성능면에서 이득이다~ 라는것
공식적인 말에 따르면
"일반적으로 클래스는 좀 더 복잡한 동작이나 클래스 개체를 만든 후 수정하려는 데이터를 모델링하는 데 사용됩니다. 구조체는 구조체를 만든 후에 수정하지 않으려는 데이터를 주로 포함하는 작은 데이터 구조에 가장 적합합니다."
라고한다.
'교육 노트 > C# 강의' 카테고리의 다른 글
[C# 때려잡기] C# 강의 35. 컬렉션 (0) | 2018.12.08 |
---|---|
[C# 때려잡기] C# 강의 34. 제네릭 (1) | 2018.12.08 |
[C# 때려잡기] C# 강의 32. 추상클래스와 인터페이스 (0) | 2018.12.08 |
[C# 때려잡기] C# 강의 31. 가상함수, 정적 바인딩, 동적바인딩 (2) | 2018.12.08 |
[C# 때려잡기] C# 강의 30. 다형성, 다운 캐스팅 업 캐스팅 (0) | 2018.11.02 |