[C# 시작 전 필수] 객체지향의 '접근 제한자'

2025. 3. 14. 23:42programming/C#

🔒 접근 제한자(Access Modifiers)란?

클래스, 변수, 메서드 등에 대한 접근 범위를 제한하는 키워드.
즉, 어디에서 해당 멤버를 사용할 수 있는지를 결정하는 역할을 한다.


 

🚀 C#의 주요 접근 제한자 5가지

접근 제한자 접근 가능 범위 사용 예시

public 어디서나 접근 가능 클래스 내부, 외부, 다른 프로젝트에서도 사용 가능
private 해당 클래스 내부에서만 접근 가능 외부에서는 절대 접근 불가
protected 해당 클래스와 자식 클래스에서만 접근 가능 상속받은 클래스에서 사용 가능
internal 같은 프로젝트(어셈블리) 내에서만 접근 가능 다른 프로젝트에서는 접근 불가
protected internal 같은 프로젝트 또는 상속받은 클래스에서 접근 가능 내부 또는 상속 관계에서 사용 가능

 


🔹 접근 제한자 예제

class 사람 {
    public string 이름 = "홍길동";   // 어디서나 접근 가능
    private int 나이 = 25;          // 해당 클래스 내부에서만 접근 가능
    protected string 국적 = "한국"; // 자식 클래스에서도 접근 가능
    internal string 주소 = "서울";  // 같은 프로젝트 내에서 접근 가능

    public void 소개() {
        Console.WriteLine($"이름: {이름}, 나이: {나이}");
    }
}

class 학생 : 사람 {
    public void 정보출력() {
        Console.WriteLine($"이름: {이름}, 국적: {국적}"); // protected 변수 접근 가능
        // Console.WriteLine($"나이: {나이}"); // ❌ private이므로 접근 불가
    }
}

class Program {
    static void Main() {
        사람 p = new 사람();
        Console.WriteLine(p.이름);  // ✅ public이므로 접근 가능
        // Console.WriteLine(p.나이);  // ❌ private이므로 접근 불가
        // Console.WriteLine(p.국적);  // ❌ protected이므로 접근 불가
        Console.WriteLine(p.주소);  // ✅ internal이므로 같은 프로젝트 내에서 접근 가능
    }
}

🔹 접근 제한자 요약

제한자 클래스 내부 자식 클래스 같은 프로젝트 다른 프로젝트

제한자 클래스내부 자식클래스 같은 프로젝트 다른 프로젝트
public
private
protected
internal
protected internal

 


🔹 언제 어떤 접근 제한자를 사용할까?

public → 모든 곳에서 사용해야 하는 경우 (예: 공용 라이브러리 함수)
private → 외부에서 접근하면 안 되는 중요한 데이터 (예: 비밀번호, 개인 정보)
protected → 자식 클래스에서만 사용할 데이터 (예: 동물의 기본 행동)
internal → 같은 프로젝트 내에서만 공유해야 할 데이터 (예: 프로젝트 내부 유틸 함수)
protected internal → 내부 또는 상속 관계에서만 접근해야 할 데이터 (예: 특정 유틸 클래스)


🎯 정리

접근 제한자는 클래스 멤버(변수, 메서드 등)의 접근 범위를 결정하는 키워드
✅ public, private, protected, internal, protected internal 총 5가지
보안과 캡슐화를 위해 꼭 적절한 접근 제한자를 사용해야 함