삽질의 현장/- .NET

#026_닷넷(.NET)_.Net Framework 기본 - 접근 한정자

shovelman 2015. 10. 27. 00:27


안녕하세요 삽잡이입니다.


이번 시간에는 C#에서 제공하는 '접근 한정자'에 대해서 알아보려고합니다.


C#의 접근 한정자는 5가지입니다.



새로운 이 'internal', 'protected internal' 접근 한정자는 

'어셈블리' 개념을 포함하고 있습니다.


어셈블리는 지금 상태에서는 쉽게 '.exe', '.dll' 을 의미한다고 보시면 됩니다.

이 어셈블리는 논리적인 개념입니다.

왜냐하면, '모듈'이라는 여러 파일들이 모여 하나의 어셈블리로 모일 수 있기 때문입니다.

그리고 이를 다중 어셈블리라고 부르고요...


아무튼... .exe 파일 하나를 어셈블리라고 불러보도록 하겠습니다.

internal은 이 '어셈블리 내'에서 라는 의미를 가지고 있습니다.

protected는 '상속 구조 내'에서라는 의미를 가지고 있습니다.

그렇다면 protected internal 한정자에 대한 의미를 한번 유추해보시겠습니까?


자... 한번 봐봅시다...



어셈블리가 여러 파일로 이루어져있다고 생각해봅시다...

A라는 클래스로 이루어진 파일 하나, 

B라는 클래스로 이루어진 파일 하나,

C라는 클래스로 이루어진 파일 하나...


internal 한정자는 해당 타입의 '어셈블리 내'에서를 말합니다...

하지만, 다른 C 클래스가 B를 상속받는다고 해봅시다...

다른 어셈블리에서 상속받는 형태 아니겠습니까...


이 경우에도 접근이 가능하도록 하는 접근 한정자가 바로

'protected internal'이라는 것입니다.

즉, 상속 관계에서 접근 권한을 가질 수 있다는 뜻이지요...


public으로 클래스를 만들게 되면 외부 어셈블리에서도 사용이 가능해집니다.

뭐 당연한 소리지요...


그런데... 아래의 그림을 한번 보시길 바랍니다...



클래스는 이 처럼 '형식'과 '멤버'로 나뉠 수 있습니다.


아까 언급한 다섯가지의 가시성은 '멤버'에서는 다 사용할 수 있습니다.

그런데 형식(타입)에서는 두 가지의 가시성만 가능합니다.


형식이란 '정의'입니다.

따라서 이곳에는 internal과 public 한정자만 가능합니다...


만약, 한정자를 생략한다면 가장 높은 보안성을 가지게됩니다.

멤버를 생략하면 'private'이 되는 것이고,

형식을 생략하면 'internal'이 되는 것입니다...


그런데 만약, 

형식 중에서 내부에 만들어지는 중첩 형식이라면 'private'가 하나 더 포함됩니다...


 

정의되어있는 클래스는 어딘가에서 사용될 것입니다.

그런데 최소한 내 클래스 내에서는 사용되어야되지 않겠습니까...


중첩 형식에서는 B라는 클래스가 A에서만 써야될 경우도 있기 때문에 

private도 포함되는 것입니다.


이번 시간은 여기까지 하도록 하겠습니다.

이상 삽잡이였습니다!