class와 구별되는 struct의 특징
1.struct 는 인터페이스만 상속받을 수 있고, 다른 struct 나 클래스를 상속받을 수 없다.
또한 class가 struct 를 상속받을 수 없다.
2.클래스와 마찬가지로 메소드,필드,속성을 가질 수 있으나 소멸자를 가질 수 없다.
3.struct 는 값 유형이고 class 는 참조 유형이다.
따라서 struct 는 힙이 아닌 스택에 존재하게 되고,
= 연산자 사용시 값이 copy 된다
= 연산자 사용시 값이 copy 된다
4.casting 시 as 키워드를 사용할 수 없다.
메쏘드의 인자로 struct 와 class를 모두 받아야 한다면 object 로 받아라!
그리고 is 로 검사하고 캐스팅해서 사용하면 된다.(앞서 언급했듯이 struct 에는 as 키워드를 사용할 수 없음에 유의)
위와 같은 식으로 스택에 있는 struct 를 힙에 있어야 하는 class 로 받게 되면.. (직접 대입하는 경우도 마찬가지)
struct 가 boxing 되어 힙에 복사되고, casting 시에 unboxing 되어 다시 스택에 존재하게 된다.
(headfirst C# p684)
이 과정은 자동으로 이루어지므로 boxing, unboxing 과정은 자세하게 신경쓸 필요가 없다.
하지만 boxing은 추가적인 오버헤드가 소요되므로(그것도 결코 작지 않은)
boxing 을 하는 코드가 매우 여러번 수행된다면 성능을 심각하게 저하시킬 수 있으니 코드를 고치는 것을 고려해야 한다.
**struct 는 "신선한 복사본"을 만들기가 쉬우므로 이런 일을 많이 해야 하는 경우 유용하게 쓸 수 있다.
'C#, .NET' 카테고리의 다른 글
Hive Simulator (0) | 2011.06.17 |
---|---|
확장 메소드와 static class (0) | 2011.06.17 |
destructor / Dispose() (0) | 2011.06.17 |
Form 과 관련된 여러가지 속성 등 (0) | 2011.06.17 |
컨트롤과 Dispose() (0) | 2011.06.17 |