C# 추상 클래스 디자인 (Abstract class design)



 책의 예제 코드를 코딩 하다가 Resharper 에서 코드에 경고가 있다가 표시해주고 있었다. 




상황은 그렇다.

Location 은 추상 클래스다. Location 의 생성자의 접근 지정자가 public 이므로 protected 로 변경하기를 추천(?) 한다는 것이다. 물론 public 으로 지정해도 컴파일은 된다. 

1. 추상 클래스의 public 생성자.
일단 public 생성자는 의미가 없다. public 생성자는 해당 클래스의 인스턴스를 만들  때 사용한다. 하지만 추상 클래스는 인스턴스를 생성할 수 없다. 

2. 추상 클래스의 protected 생성자.
protected 접근 지정자는 외부에서는 접근할 수 없지만, 그 클래스를 상속 받는 파생 클래스에서는 public 으로 접근할 수 있다는 소리다. 추상 클래스에서 protected 생성자를 추천하는 것는 추상 클래스를 상속 받는 파생클래스에서 파생 클래스 생성자가 부모 클래스 즉, 추상 클래스를 초기화 하기 위해 추상 클래스 생성자를 호출 할 수 있도록 지원하기 위해서 이다. 


MSDN에 추상클래스 디자인에 대한 자료가 있다. 

강조한 내용을 보면

"추상 형식에 public 또는 protected internal(Visual Basic의 경우 Protected Friend) 생성자를 정의하지 않습니다."
"추상 클래스에 protected 또는 internal 생성자를 정의합니다."
"사용자가 제공하는 각 추상 클래스에서 상속되는 하나 이상의 구체적인 형식을 제공합니다."

internal 은 같은 어셈블리내에서는 public 인데... protected internal 이와 이와 비슷하게... 조금은 이해가 가질 않지만 많이 사용하다 보면 이해가 가겠지...


MSDN에서 언급한 것처럼 올바르게 디자인 하고, 올바르게 사용할 줄 알아야 한다.






Posted by six605
,