상속보다는 interface를 정의하고 구현하는 것이 좋다.
- 상위 클래스는 클래스의 계층 구조에서 공통의 원형을 제공한다.
- Interface는 특정 타잎이 구현해야지 되는 동작에 대해서 묘사한다.
- 기능 명세
- 기능에 대한 계약
- 상속 관계를 가지지 않은 서로 다른 타잎들이 동일한 interface를 구현해서 코드의 재활용을 높인다.
- 클래스와 Interface의 선택
- 어떤 방법으로 추상화를 제공하는가에 대한 문제
- Interface : 특정 타잎이 반드시 구현해야지 되는 계약
- Base Class : 언제든 필요시에 변경되고 확장이 가능
- 서로간에 연관이 없는 class간의 공통동작에 대한 확장
- 어떤 방법으로 추상화를 제공하는가에 대한 문제
interface의 구분과 virtual method의 overriding의 구분
- Base class의 interface는 virtual이 될 수 없다 : interface는 직접 사용되는 동작으로 구분되어야지 된다
- Type이 구현되는 계약으로 인식
delegate를 이용해서 CallBack을 표현하라
- class간의 상호통신을 수행하는데에, 결합도를 낮추기 위한 방법으로 delegate가 좋다
- runtime 시에 callback을 구상하는 .NET Framework에서의 최고의 방법
event를 이용해서 외부로 노출할 interface를 구분하라
- 다수의 다른 객체와 통신을 해야지 될 때에 이벤트를 사용
- delegate와 event는 다르지만, 사용에 있어서 같다고 봐도 무방하다.
class 내부 객체에 대한 reference 반환을 피하라.
- reference 변환은 class의 내부의 값을 변환시킬 수 있다.
- 모든 reference의 값을 get 등의 값으로 외부에 노출시킬 때는 copy()를 시켜서 복사본을 내보내는 것이 좋다.
Serializable Type이 더 좋다.
- Serialize가 제공되지 않는 타잎을 맴버로 삼는 class의 Serialize가 불가능하기 때문에 처음부터 모든 class에서 Serializable 상태로 만들어준다.
- 다음을 제외한 class는 Serializable type이 되어야지 된다.
- UI
- WinForm
- UI 전용 Contorl