private

private (C# Reference)

C#에서는 클래스나 구조체의 멤버에 누가 접근할 수 있는지를 private라는 **멤버 접근 한정자(member access modifier)**로 조절해요. 한정자라는 이름답게, 이 키워드는 멤버가 선언된 곳 안에서만 쓰도록 제한하는 역할을 하죠.

이 글은 private 접근 한정자를 다룹니다. 참고로 private 키워드는 private protected 접근 한정자의 일부로도 쓰여요.

[!INCLUDEcsharp-version-note]

본문

private 접근은 접근 수준 중에서 가장 제한적이에요. private 멤버는 그 멤버를 선언한 클래스나 구조체의 본문 안에서만 접근할 수 있습니다. 다음 예시를 볼게요.

class Employee
{
    private int _i;
    double _d;   // private access by default
}

여기서 _i는 명시적으로 private로 선언했고, _d는 한정자를 붙이지 않았어요. 그런데도 _d는 기본적으로 private 접근을 갖습니다. 즉 클래스 본문 안에서만 다룰 수 있는 값이 되는 거죠.

같은 본문 안에 중첩된 타입도 이 private 멤버에 접근할 수 있어요.

반대로, 선언된 클래스나 구조체의 밖에서 private 멤버를 참조하면 컴파일러가 오류를 냅니다. 밖에서는 이 멤버의 존재 자체를 접근할 수 없다고 보는 거예요.

private가 다른 접근 한정자들과 어떻게 다른지는 Accessibility LevelsAccess Modifiers에서 비교해 볼 수 있어요.

이번 예시에서는 Employee 클래스가 _name_salary라는 두 개의 private 데이터 멤버를 가집니다. 이 둘은 private 멤버이기 때문에, 접근하려면 멤버 메서드를 통하는 방법밖에 없어요. 그래서 예시에서는 GetName이라는 public 메서드와 Salary라는 public 읽기 전용 속성을 추가해서, private 멤버에 통제된 접근을 허용하도록 만들어 두었죠. _name은 public 메서드를 통해 접근하고, _salary는 public 읽기 전용 속성을 통해 접근합니다. 속성에 대한 자세한 내용은 Properties에서 다뤄요.

:::code language="csharp" source="./snippets/csrefKeywordsModifiers.cs" id="10":::

C# language specification

더 자세한 내용은 C# Language SpecificationDeclared accessibility에서 볼 수 있어요. 언어 사양서는 C# 구문과 사용법의 가장 확실한 기준(source)입니다.

더 알아보기

출처: private keyword - C# Reference