[C#] 보호 수준 때문에 'member'에 액세스할 수 없습니다. 오류코드 CS0122 해결 방법

보호 수준 때문에 'member'에 액세스할 수 없습니다.

C#에서 "보호 수준 때문에 'member'에 액세스할 수 없습니다." 오류의 원문은 "'member' is inaccessible due to its protection level"입니다. 여기서 말하는 보호수준은 해당 클래스에 대한 접근 제어자(접근 한정자)가 원인입니다. CS0122 오류를 해결하려면 객체의 모디파이어를 수정해 주세요. 해당 오류가 발생하는 경우에는 보통 기본값인 private으로 설정되어 있을 것입니다.

보호 수준 때문에 'member'에 액세스할 수 없습니다.

C# 접근 제어자 보호 수준

접근 제어자는 영어로 access modifier입니다. 모디파이어의 기본값인 private의 경우에는 클래스 내부에서만 접근이 가능합니다. 그리고 보호 수준을 이해하기 위해 2가지 개념을 알아야 하는데, 하나는 파생 클래스의 여부이고, 다른 하나는 어셈블리 위치입니다.

파생 클래스 여부(파생인지, 파생이 아닌지), 그리고 어셈블리의 위치(동일한 어셈블리인지, 다른 어셈블리인지)에 따라 각각 2가지 경우의 수를 곱하면 총 4가지가 나옵니다. internal, protected, protected internal, 그리고 public 접근 제어자는 다음과 같이 보호 수준에 접근이 가능합니다.

C# 접근 제어자 보호 수준 알아보기

  • private은 최소 접근 제어자이고, public은 최대 접근 제어자입니다.
  • internal은 동일 어셈블리에서 접근이 가능합니다.
  • protected는 어셈블리가 동일할뿐만 아니라, 다른 어셈블리어도 파생 클래스이면 접근이 가능합니다.
  • protected internal은 protected의 성격과 internal의 성격을 합친 것으로 public 다음으로 넓은 접근 제어를 허용합니다.
  • 접근 제어자 보호 수준은 public > protected internal > (protected, internal) > private입니다.
  • 보호 수준 때문에 'member'에 액세스할 수 없습니다. 오류는 public으로 해결할 수 있는 경우가 많으나, 접근 제어의 필요에 따라 protected나 internal을 고려할 수 있습니다.
호출자의 위치 public protected
internal
protected internal private
클래스 내 가능 가능 가능 가능 가능
파생 클래스
(동일 어셈블리)
가능 가능 가능 가능 불가능
비(non)-파생 클래스
(동일 어셈블리)
가능 가능 불가능 가능 불가능
파생 클래스
(다른 어셈블리)
가능 가능 가능 불가능 불가능
비(non)-파생 클래스
(다른 어셈블리)
가능 불가능 불가능 불가능 불가능

댓글