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

C# 액세스 한정자(Access Modifier) 완벽 정리 – 종류와 사용 예제

액세스 한정자(Access Modifier)는 C#에서 변수와 함수(메서드)에 대한 접근 범위(scope), 즉 어디서부터 접근할 수 있는지를 지정하는 키워드입니다. 적절한 한정자를 사용하면 클래스 내부 구현을 보호하고, 코드의 안정성과 유지보수성을 높일 수 있습니다.

C#에서 제공하는 액세스 한정자 종류

1. public

public 한정자는 멤버 접근에 아무런 제한을 두지 않습니다. 동일 어셈블리뿐 아니라 외부 어셈블리의 모든 코드에서 자유롭게 접근할 수 있습니다.

2. protected

protected 한정자는 해당 클래스 자신과 이를 상속받은 파생 클래스 내부에서만 접근할 수 있습니다.

3. internal

internal 한정자는 멤버가 선언된 동일한 프로그램(어셈블리) 내부에서만 접근이 허용됩니다. 외부 프로젝트에서는 접근할 수 없습니다.

4. protected internal

protected internalprotectedinternal 두 한정자의 특성을 모두 결합한 것으로, 같은 어셈블리 내의 모든 코드와 다른 어셈블리의 파생 클래스에서도 접근할 수 있습니다.

5. private

private 한정자는 선언된 클래스 내부에서만 접근이 제한됩니다. private으로 지정된 멤버는 클래스 외부에서는 전혀 접근할 수 없으며, 정보 은닉(information hiding)의 기본 수단으로 활용됩니다.

액세스 한정자 비교 요약

한정자같은 클래스파생 클래스같은 어셈블리외부 어셈블리
publicOOOO
protectedOOXX
internalOOOX
protected internalOOOX*
privateOXXX

* 단, 외부 어셈블리라도 해당 클래스를 상속한 파생 클래스에서는 접근 가능합니다.

예제: protected 한정자로 멤버 접근하기

다음은 protected 액세스 한정자를 사용하여 부모 클래스의 protected 멤버를 파생 클래스에서 접근하는 예제입니다.

using System;
namespace MySpecifiers {
    class Demo {
        protected string name = "Website";
        protected void Display(string str) {
            Console.WriteLine("Tabs: " + str);
        }
    }

    class Test : Demo {
        static void Main(string[] args) {
            Test t = new Test();
            Console.WriteLine("Details: " + t.name);
            t.Display("Product");
            t.Display("Services");
            t.Display("Tools");
            t.Display("Plugins");
        }
    }
}

실행 결과

Details: Website
Tabs: Product
Tabs: Services
Tabs: Tools
Tabs: Plugins

위 예제에서 Test 클래스는 Demo 클래스를 상속했기 때문에, protected로 선언된 name 필드와 Display() 메서드에 문제없이 접근할 수 있습니다. 만약 두 클래스가 상속 관계가 아니었다면 컴파일 오류가 발생합니다.