잊지 않겠습니다.

상속보다는 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()를 시켜서 복사본을 내보내는 것이 좋다.
명령적 프로그래밍보다 선언적 프로그래밍이 더 좋다.
  • Attribute를 자주 사용하고, method에 대한 명시를 정확하게 구현하라.
  • 가독성이 매우 뛰어나다.
Serializable Type이 더 좋다.
  • Serialize가 제공되지 않는 타잎을 맴버로 삼는 class의 Serialize가 불가능하기 때문에 처음부터 모든 class에서 Serializable 상태로 만들어준다.
  • 다음을 제외한 class는 Serializable type이 되어야지 된다.
    • UI
    • WinForm
    • UI 전용 Contorl
IComparable과 IComparer를 이용해서 순차관계를 구현하라.
  •  검색과 정렬을 위한 상호간의 순차관계를 표현 가능해야지 된다
  • CompareTo() : 현재 객체가 비교할 객체보다 작은 경우, 0보다 작은 값을. 클 경우에 0보다 큰 값을 반환하도록 구현 
ICloneable의 구현을 피해라
Posted by Y2K
,