C#객체지향

접근 제한자 기본

`public`, `private`, `protected`, `internal`로 클래스와 멤버의 노출 범위를 제어하는 C# 기본 규칙입니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
public class Player
{
    public string Name { get; private set; }
    private int score;
    protected int level;
}

설명

  • 접근 제한자는 어떤 코드가 특정 타입이나 멤버에 접근할 수 있는지 결정합니다.
  • public은 가장 넓게 공개하고, private은 현재 타입 안에서만 접근하게 합니다.
  • protected는 상속받은 타입까지 범위를 넓히고, internal은 같은 어셈블리 안으로 범위를 제한합니다.
  • 캡슐화는 상태를 모두 숨기라는 뜻이 아니라, 바깥에 보여 줄 최소 인터페이스만 명확히 드러내라는 뜻에 가깝습니다.

짧은 예제

csharp
public class BankAccount
{
    public decimal Balance { get; private set; }

    public void Deposit(decimal amount)
    {
        Balance += amount;
    }
}

빠른 정리

항목설명
public어디서나 접근 가능
private현재 타입 안에서만 접근 가능
protected현재 타입 + 파생 타입
internal같은 어셈블리 안에서 접근 가능
private set읽기는 공개, 쓰기는 내부 제한

주의할 점

처음부터 모두 public으로 열어 두면 이후에 구조를 바꾸기 어려워집니다. 외부에 반드시 필요한 것만 공개하는 편이 유지보수에 유리합니다.