Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 액세스 한정자(Access Specifier)란? 5가지 종류와 접근 범위 총정리

클래스 멤버(변수와 메서드)의 접근 범위와 가시성을 정의하려면 액세스 한정자(Access Specifier)를 사용합니다. 액세스 한정자는 외부 코드가 클래스 내부 요소에 얼마나 접근할 수 있는지 제어하며, 객체 지향 프로그래밍의 핵심 원칙인 캡슐화를 구현하는 중요한 도구입니다.

C#에서 지원하는 대표적인 액세스 한정자는 다음과 같습니다.

  • public
  • private
  • protected
  • internal
  • protected internal

지금부터 각 액세스 한정자의 특징을 하나씩 자세히 살펴보겠습니다.

1. public 액세스 한정자

public으로 선언된 멤버는 클래스가 자신의 멤버 변수와 멤버 함수를 다른 모든 함수와 객체에 공개하도록 허용합니다. 어셈블리 내부나 외부 어디에서든 제한 없이 접근할 수 있으므로, 외부에 반드시 노출해야 하는 API나 공용 메서드에 주로 사용됩니다.

2. private 액세스 한정자

private은 클래스가 자신의 멤버 변수와 멤버 함수를 다른 함수와 객체로부터 숨기도록 합니다. private 멤버에는 오직 같은 클래스 내부의 함수만 접근할 수 있으며, 클래스의 내부 구현 세부사항을 외부로부터 보호하는 가장 기본적인 방법입니다.

3. protected 액세스 한정자

protected는 파생 클래스(자식 클래스)가 기본 클래스(부모 클래스)의 멤버 변수와 멤버 함수에 접근할 수 있도록 허용합니다. 외부에는 숨기면서 상속 관계에 있는 클래스 간에만 기능을 공유하고 싶을 때 유용하게 활용됩니다.

4. internal 액세스 한정자

internal은 클래스가 자신의 멤버 변수와 멤버 함수를 현재 어셈블리(Assembly) 내의 다른 함수와 객체에 공개하도록 합니다. 동일한 프로젝트 내에서는 자유롭게 접근할 수 있지만, 다른 어셈블리에서는 접근이 불가능합니다.

5. protected internal 액세스 한정자

protected internal은 protected와 internal의 기능을 결합한 한정자입니다. 동일한 어셈블리 내의 모든 코드와, 어셈블리가 달라도 해당 클래스를 상속받은 파생 클래스에서 접근할 수 있습니다.

코드 예제

class MyClass
{
    public int publicField;       // 어디서든 접근 가능
    private int privateField;     // MyClass 내부에서만 접근 가능
    protected int protectedField; // 파생 클래스에서 접근 가능
    internal int internalField;   // 같은 어셈블리 내에서 접근 가능
}

액세스 한정자 비교 요약

한정자접근 가능 범위
public모든 곳에서 접근 가능
private같은 클래스 내부에서만 접근 가능
protected같은 클래스 및 파생 클래스에서 접근 가능
internal같은 어셈블리 내에서 접근 가능
protected internal같은 어셈블리 또는 파생 클래스에서 접근 가능

참고로 C# 7.2부터는 위 다섯 가지 외에 private protected 한정자도 추가되었으며, 이는 '같은 어셈블리 안의 파생 클래스'에서만 접근을 허용하는 더 엄격한 범위를 제공합니다.