internal 클래스를 이용 할 때 발생할 수 있는 오류이다.
일관성 없는 액세스 가능성 : 'namespaceA.InternalClass' 속성 형식이 'namespaceB.PublicClass.ProtectedProperty' 속성보다 액세스하기 어렵습니다.
namespace A 에 internal class 를 선언하고, 해당 internal class 를 friend dll B 에서 이용한다고 하자.
그러면 B 의 public class 에서는 A 의 internal class 를 이용 할 수 있지만, 그 프로퍼티가 protected 이면 일관성 없는 액세스 가능성 오류가 발생한다.
왜? protected 는 internal 보다 좁지만 넓은 한정자이기 때문이다. Protected 속성은 해당 dll 내에서는 internal 보다 좁지만, 다른 dll 을 넘나들며 상속되면 이야기가 달라진다. 위의 public class 가 다른 dll C 에서 상속 되면 protected property 가 C 에서도 보이게 된다. 그런데 C 는 B 와 달리 A 의 friend dll 이 아니므로 A 의 internal 클래스를 볼 수 없다. 따라서 일관성 없는 액세스 가능성 오류가 나타나는 것이다.
나는 unit test project 를 위의 dll B 역할로 생성하다가 문제를 만났다. 결국 해결책은 internal class 를 public class 로 바꾸는 수 밖에 없었다.
참고로 protected internal 키워드는 and 가 아니라 or 개념이다. protected 이거나, 또는 internal 이거나. 따라서 위에서 super class 의 protected property 를 다른 dll 의 drived class 에서 보지 못하도록 하는 방법은 없다. 아마도 C# 언어 설계팀은 internal class 를 friend class 에서 protected property 로 사용하는 상황을 설계 오류로 생각했을 것 같다. 아니면 너무 예외적인 상황이라 개발비용을 투입할 필요를 못느꼈거나.
'프로그래밍' 카테고리의 다른 글
[Programming] 임백준 개발자가 권하는 콘텐츠들 (0) | 2015.06.13 |
---|---|
[Python] Functional Programming HOWTO 요약 (0) | 2015.06.07 |
[JS & jQuery] 커서를 input box 의 맨 뒤에 위치시키기 (0) | 2015.02.08 |
[CoreOS][Docker] Windows PC 에 CoreOS, Docker 설치하기 2 (0) | 2014.11.10 |
[CoreOS][Docker] Windows PC 에 CoreOS, Docker 설치하기 1 (0) | 2014.11.09 |