접근 제한자 Access Modifiers

Gogi·2023년 9월 6일

C# 언어 기초 목록

목록 보기
10/29

모든 형식과 형식 멤버에는 액세스 수준이 있습니다.

public: 동일한 어셈블리의 다른 코드나 해당 어셈블리를 참조하는 다른 어셈블리의 코드에서 형식이나 멤버에 액세스할 수 있습니다.

private: 같은 class 또는 struct의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.

protected: 같은 class 또는 해당 class에서 파생된 class의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.

(기본)internal: 동일한 어셈블리의 코드에서는 형식이나 멤버에 액세스할 수 있지만 다른 어셈블리의 코드에서는 액세스할 수 없습니다.

protected internal: 형식 또는 멤버가 선언된 어셈블리의 모든 코드에서 또는 다른 어셈블리의 파생 class 내에서 형식 또는 멤버에 액세스할 수 있습니다.

private protected: 포함 어셈블리 내에서 선언된 class터 파생된 형식이 형식 또는 멤버에 액세스할 수 있습니다.

  • 어셈블리(Assembly) : 컴파일을 통해서 나온 결과 파일을 C#에서는 어셈블리라고 부릅니다.

  • 라이브러리를 클래스에 포함 시켜서, 라이브러리에 들어있는 클래스를 사용

  • 정적 라이브러리(컴파일에 라이브러리를 포함)

  • 동적 라이브러리(메모리에 로드해서 사용)

라이브러리를 배포할 땐 접근 권한을 적절히 줄 것

요약 테이블 참고
https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers

class Class1 {} // Class1 is internal (default)
public class Class2 {}

class Class1 {} // Class1 is internal (default)
public class Class2 {}

'기본 값이 있지만 늘 명시적으로 작성할 것'

Accessibility Capping

  • 타입의 권한이 멤버의 권한을 덮어쓴다. (예를 들어 인터널이면 클래스 밑에 있는 퍼블릭 애들은 다~ 인터널이 됨)

class C { public void Foo() {} }

Restrictions on Access Modifiers

  • 오버라이드시 접근 권한은 일치해야 한다.

class BaseClass { protected virtual void Foo() {} }
class Subclass1 : BaseClass { protected override void Foo() {} } // OK
class Subclass2 : BaseClass { public override void Foo() {} } // Error

  • 상속시 서브 클래스는 베이스 클래스보다 더 큰 접근 권한을 설정할수 없다.

internal class A {}
public class B : A {} // Error

profile
C, C++, C#, Unity

0개의 댓글