포스트를 만든 목적
- 지하철에서 책 본 것을 정리하려고
관린링크
- http://debop.egloos.com/2298224 // 인터페이스에 대한 설명 및 설계
내용
상속은 무엇이고 interface는 무엇인가?
- http://msdn.microsoft.com/ko-kr/library/ms173149%28VS.80%29.aspx // C# 상속
- http://msdn.microsoft.com/ko-kr/library/ms173156%28v=VS.80%29.aspx // C# 인터페이스
왜 상속보다 interface가 더 좋은가?
- 상속관계가 없는 서로 다른 타입도 사용 할 수 있다.
2번째 PrintCollection() 함수는 ClollectionBase를 상속 받은 녀석만 사용 할 수 있지만, 1번째 PrintCollection() 함수는 IEnumerable 인터페이스로 구현했다면, 어떤 컨테이너든 사용 할 수 있는 장점이 있다.
- 객체의 외부 접근을 제한하기 쉽다.
2번째는 DataSet 자체를 전달 시키기 때문에, 러턴 후, 정보 변경 우려가 있으나, 1번째 IListSource의 경우, 내부 내용을 변경 할 수 없다. 왜냐하면, 내부 변경을 위한 인터페이스가 없기 때문이다.
- unboxing을 피할 수 있다.
Interface를 구현하게 되면, 구조체가 구현했던 모든 interface들은 box에 의해서 다시 한번 재구현 되는데, 이때 interface를 통해 box 내 구조체에 접근하게 되면, unboxing 없이 사용 될 수 있다.
결론
- 상속보다 인터페이스가 더 약한 관계를 갖기 때문에, 더 좋다.
여담
- 박싱이 되나 안되나 알기 위해 Sort() 내부를 봐야 하는데, 못보니까 답답하다.
- 너무 졸렵다.
'책 정리 > Effective C#' 카테고리의 다른 글
item 24, 명령적 프로그래밍보다 선언적 프로그래밍이 더 좋다. (0) | 2010.07.14 |
---|---|
item 23, 클래스 내부 객체에 대한 reference 반환을 피하라. (0) | 2010.07.11 |
item 22, 이벤트를 이용하여 외부로 노출할 인터페이스를 정의하라. (0) | 2010.07.10 |
item 21, delegate를 이용하여 콜백을 표현하라. (1) | 2010.07.10 |
item 20, interface의 구현과 virtual 메서드의 overriding을 구분하라. (0) | 2010.07.10 |
item 18, 표준 Dispose 패턴을 구현하라. (2) | 2010.07.06 |
item 17, boxing과 unboxing을 최소화하라 (0) | 2010.07.04 |
item 16, Garbage를 최소화 하라. (0) | 2010.07.03 |
item 15, 자원해제를 위해서 using과 try/finally를 이용해라 (0) | 2010.07.03 |
item 14, 연쇄적인 생성자 호출을 이용하라. (4) | 2010.07.02 |
최근댓글