[C#] 접근 제한자

Min·2024년 7월 26일
0

CSharp

목록 보기
7/25
post-thumbnail

접근제한자

접근 제한자는 객체지향의 추상화와 은닉성을 돕는 문법이라고 생각한다. 접근제한자를 통해 구체적인 구조 자체는 숨기고, 사용하기 편한 인터페이스만을 공개하는 것으로 추상화를 돕고, 사용자가 직접 접근하면 데이터의 무결성이 깨질 수 있는 데이터를 보호하는 것을 통해 은닉성을 돕는다.

접근제한자를 사용할 수 있는 대상

모든 형식과 형식멤버에는 액세스 수준이 있다고 한다.
모든 형식 : 형식
형식 멤버 : 멤버

class 자체에 접근제한자가 붙는다고?

개념자체는, class에 접근제한자를 붙여 접근가능한 범위를 정하는 기능이다. 근데 C++에서는 없는 기능이다. 왜일까?

조금 생각해보니, C++은 일반적으로 분할구현을 통해 파일별로 클래스를 구현하고, #include를 통해 해당 파일을 참조하여 클래스를 사용한다. 즉, 내가 해당 파일을 명시적으로 참조하지 않으면, 해당 클래스에 접근하는 것은 불가능하다. C++에서는 개발자가 의식적으로 class에 대한 접근을 설정해주는 것과 다름이 없다.

하지만, C#에서는 솔루션 내 모든 파일은 참조가 되어있는 상태이다. 그렇기 때문에 오히려 class에 대한 접근을 제한할 수단이 필요했던 것이다.

접근제한자 요약

설명

  • public: 모든 어셈블리의 코드가 이 형식이나 멤버에 액세스할 수 있습니다. 포함하는 형식의 접근성 수준은 해당 형식의 공용 멤버에 대한 접근성 수준을 제어합니다.
  • private: 동일한 class 또는 struct에 선언된 코드만 이 멤버에 액세스할 수 있습니다.
  • protected: 동일한 class 또는 파생된 class의 코드만 이 형식이나 멤버에 액세스할 수 있습니다.
  • internal: 동일한 어셈블리의 코드만 이 형식이나 멤버에 액세스할 수 있습니다.
  • protected internal: 동일한 어셈블리 또는 다른 어셈블리의 파생 클래스에 있는 코드만 이 형식이나 멤버에 액세스할 수 있습니다.
  • private protected: 동일한 어셈블리 및 동일한 클래스 또는 파생 클래스의 코드만 형식이나 멤버에 액세스할 수 있습니다.
  • file: 동일한 파일에 있는 코드만 형식이나 멤버에 액세스할 수 있습니다.

public, private, proteted는 C++과 똑같다.
생소한 녀석들만 알아보자.

  • internal
    동일한 어셈블리의 코드는 같은 프로젝트를 의미한다. 솔루션을 빌드하게되면, 프로젝트들은 개별적인 exe파일, dll파일로 만들어진다(새로운 사실을 알았는데 C#은 lib를 사용하지 못한다고 한다.). 각 파일 내부에서 쓰이는 기능들 간 접근을 허용하는 접근제한자라고 생각하면 될 것 같다.
  • protected internal
    internal과 protected의 합집합이다. 어떤의도로 만들어진건지는 잘 모르겠다. 이렇게 쓸 일이 있나? 많이는 안쓸것 같다.
  • private protected
    internal과 protected의 교집합이다. 이게 protected internal보다는 많이 쓸 거같은데. 개인적으로는 이름도 별로 직관적이지 않은 것 같다. 맘에안드네!
  • file
    같은 파일 내에서만 접근이 가능한 접근제한자. 간단하고 좋네요.

사용 가능한 접근 제한자

  1. 클래스 및 구조체, 인터페이스 :
    public, internal(기본 접근제한자)
  2. 클래스 멤버(중첩 클래스 포함) :
    public, protected internal, protected, internal, private protected, private(기본 접근제한자)
  3. 구조체 멤버(중첩 클래스 및 구조체 포함) : public, internal, private(기본 접근제한자) //구조체는 상속을 지원하지 않기 때문에 protected 관련 접근제한지정자를 사용 못함
  4. 인터페이스 멤버 :
    public(기본 접근제한자)
profile
티내는 청년

0개의 댓글

관련 채용 정보