C# protected internal 접근 한정자란?
C#의 protected internal 접근 한정자는 클래스가 자신의 멤버 변수와 멤버 함수를 외부의 다른 클래스 객체나 함수로부터 숨기되, 같은 어셈블리(애플리케이션) 내부에 존재하는 파생 클래스(자식 클래스)에는 접근을 허용하는 접근 제어 방식입니다.
쉽게 말해 protected internal은 protected(파생 클래스에서 접근 가능)와 internal(같은 어셈블리 내에서 접근 가능)의 기능을 결합한 것으로, 두 조건 중 하나라도 충족하면 해당 멤버에 접근할 수 있습니다.
예제 코드
아래 예제는 파생 클래스의 객체가 protected internal로 선언된 변수에 접근하는 과정을 보여줍니다.
using System;
class One {
protected internal int a = 50;
private int b;
}
class Two : One {
public Two() {
Console.WriteLine(this.a);
}
}
class Demo {
static void Main() {
Two t = new Two();
// 파생 클래스 객체이므로 접근이 허용됩니다
t.a = 20;
}
}
실행 결과
50
코드 동작 설명
클래스 One은 protected internal로 선언된 정수형 변수 a를 가지고 있으며, 값은 50으로 초기화되어 있습니다. 반면 b는 private으로 선언되어 클래스 외부에서는 전혀 접근할 수 없습니다.
클래스 Two는 One을 상속받는 파생 클래스입니다. 생성자에서 부모 클래스의 변수 this.a에 접근하여 값을 출력하며, Main 메서드에서 생성한 파생 클래스 객체 t를 통해서도 t.a = 20;처럼 변수에 직접 값을 할당할 수 있습니다.
이처럼 protected internal 멤버는 동일한 어셈블리 안에서 파생 클래스를 통해 자유롭게 접근할 수 있지만, 상속 관계가 없거나 다른 어셈블리에 속한 외부 코드에서는 접근이 차단됩니다. 따라서 라이브러리 개발 시 내부 구현 세부 사항을 보호하면서도 상속 계층 간에는 유연한 데이터 공유가 필요한 경우에 유용하게 활용됩니다.