잊지 않겠습니다.

상속보다는 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
,

상속관계인 Class를 Derived Class, Base Class라고 할때, DerivedClass를 생성할 때 생성자의 순서는 다음과 같다.

  • Derived class의 초기화된 변수들
  • Base class의 초기화된 변수들
  • Base class의 생성자
  • Derived class의 생성자

 

따라서, override 된 함수들을 Base class의 생성자에 넣게 되는 경우에는 Derived class의 생성자에서 호출이 될 수 없다.

이때에는 Init() 또는 Initialized() 함수를 따로 구성시켜서, 생성 이후에 재초기화를 시켜줘야지 된다.

이런 경우를 two-phase construction 이라고 부른다.

Posted by Y2K
,

    COM class와 통신하는 방법에서 사용되었던 Interface를 C#에서 옮겨온 방법

  • C++에서는 pure virtual 함수를 이용한 interface의 구현으로 되었다.
  • C#에서는 Interface를 이용하는 방법이 프로그램의 디자인적 방법으로 구현되었다.
Interface의 특성
  • 암시적으로 Public
  • 암시적으로 Abstract
  • ALL OR NONE 명제를 따르게 된다.
  • 여러개의 interface를 상속가능하기 때문에, C++의 특징인 다중 상속과 비슷한 방법으로 구현이 가능하다.
추상 메서드 vs interface

  • interface는 순수한 프로토컬만의 기능을 가지고 있다.
  • 또 다른 방법의 다형적 동작이 가능한 프로그래밍이 가능하다.
  • 언제나 public이기 때문에 구현에 대해서 생각을 해줘야지 된다. : 객체내에서만 사용이 되는 것을 interface로 구현해줄 필요는 전혀 없다.
    • interface의 범위를 제한하기 위한 방법 : 언제나 공개적이고, 구현이 되어야지 된다.
인터페이스의 참조
  • as : 해당되는 interface의 구현 여부를 알아본다.
  • is : 인터페이스를 얻어낼 수 있다. (실패하면 null이 반환된다.)
Posted by Y2K
,