Purpose-built post
공부하려고 정리하는 김에 올린다.
Content
인터넷에서 다른 사람들이 정리한 것을 인용 하려고 했지만, 마땅히 인용할 꺼리를 찾지 못했다. 요세들어 의자에 앉는게 힘들(.. 대부분 잠을 자기 때문에)어서 정리하는게 싫었건만, 결국 피해 갈 수 없었다.
제목 그대로, "구분하라" 인데, 어떻게 구분 해야 할까?
저자는 C++ 과 자바의 이야기를 하면서 "왜 두 타입이 존재하는지" 를 설명한다. 자바는 모두 reference 타입이기 때문에, 속도가 느리다 라고 하고, C++ 에선 모든 타입이 value 형태로 전달 되기 때문에 partial copying - slicing the object(부분 복사 - 객체 잘림) 문제가 있다고 지적한다.
개인적인 생각으로, .. 이게 문제라고 까지 인식이 되지 않는다. 왜냐하면 이런 사실은 프로그래머가 언어를 선택할 때, 충분히 숙지해야 할 사항이기 때문이다.
그래서 C# 에는 이 두 타입을 존재하게 했다고 한다.
C++과의 차이점
C++ 의 pointer/reference 와 C#의 reference 와는 다르다. C++ 에서는 무조건 value 형태이고, 부수적으로 pointer/reference 형으로 생성 하는 것이지만, C# 에서는 reference 형이면, 무조건 reference형으로 생성해야 하기 때문이다.
여기까지가 기본지식이다. value가 무엇이고 reference가 무엇인지는 생략한다.
1. 어떻게 구분 지을까?
책 내용을 그대로 인용하면, 대체로 reference 로 쓰고, 다음의 경우에 만족할 경우 value를 쓰라고 한다.
- 단순이 저장용도로 쓸 것이면 value 로 사용 해라.
- 모든 public interface가 단지 내부값 확인하는데 쓰인다면, value 로 사용해라.
- 타입이 앞으로 상속될 가능성이 없다면, value를 사용해라.
- 타입이 앞으로 다형적으로 사용 될 필요가 없다면, value를 사용해라.
그리고 마지막으로, 타입에 행동이 있어야 한다면, reference로 정의 해서 사용 해라. 라고 한다.
Digression
- 모든건 비용 문제라고 본다.
'책 정리 > Effective C#' 카테고리의 다른 글
item 11, foreach 루프가 더 좋다. (0) | 2010.06.29 |
---|---|
item 10, GetHashCode()의 함정을 유의하라 (0) | 2010.06.27 |
item 9, ReferenceEquals(), static Equals(), instance Equals(), operator==의 상호 연관성을 이해해라. (0) | 2010.06.26 |
item 8, value 타입을 사용할 때 0이라는 값이 의미를 가질 수 있도록 하라 (0) | 2010.06.24 |
item 7, immutable atomic value 타입이 더 좋다 (0) | 2010.06.23 |
Item 5, 항상 ToString()을 작성하라. (0) | 2010.06.11 |
item 4, #if 대신 Conditional Attribute를 사용하라. (0) | 2010.06.05 |
item 3, cast보다는 is나 as가 좋다. (0) | 2010.04.05 |
Item 2, const 보다는 readonly가 더 좋다 (0) | 2010.04.02 |
Item 1, 데이터 멤버 대신에 항상 프로퍼티를 사용하라 (0) | 2010.03.31 |
최근댓글