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

C#에서 클래스 멤버의 기본 접근 한정자는 무엇일까요?

C# 클래스 멤버의 기본 접근 한정자

C#에서 클래스 멤버에 별도의 접근 한정자(access modifier)를 지정하지 않으면 기본적으로 private(비공개)가 적용됩니다. 즉, 해당 멤버는 같은 클래스 내부에서만 접근할 수 있으며, 클래스 외부에서는 직접 참조할 수 없습니다.

멤버 변수를 private으로 유지하는 이유

멤버 변수(필드)는 설계 관점에서 객체의 속성(attribute)에 해당합니다. 이런 변수들을 private으로 감추면 캡슐화(encapsulation)가 구현되어, 외부 코드가 객체의 내부 상태를 임의로 변경하는 것을 막을 수 있고 데이터의 무결성이 보장됩니다.

대신 외부에서는 public으로 공개된 멤버 함수(메서드)를 통해서만 이 변수들에 접근할 수 있습니다. 아래 예제를 통해 확인해 보겠습니다.

예제 코드

using System;

namespace RectangleApplication {
    class Rectangle {
        // 멤버 변수
        private double length;   // private 키워드를 생략해도 기본값은 private
        private double width;

        public void Acceptdetails() {
            length = 10;
            width = 14;
        }

        public double GetArea() {
            return length * width;
        }

        public void Display() {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }//end class Rectangle

    class ExecuteRectangle {
        static void Main(string[] args) {
            Rectangle r = new Rectangle();
            r.Acceptdetails();
            r.Display();
            Console.ReadLine();
        }
    }
}

lengthwidth는 private 필드이므로 Main 메서드에서 r.length = 20;처럼 직접 접근하려 하면 컴파일 오류가 발생합니다. 오직 Acceptdetails(), GetArea(), Display() 같은 public 메서드를 통해서만 값을 설정하거나 조회할 수 있습니다.

실행 결과

Length: 10
Width: 14
Area: 140

참고: C#의 주요 접근 한정자

  • public: 동일 어셈블리든 외부 어셈블리든 모든 코드에서 접근 가능
  • private: 같은 클래스(또는 구조체) 내부에서만 접근 가능 — 클래스 멤버의 기본값
  • protected: 같은 클래스와 그 파생 클래스에서 접근 가능
  • internal: 같은 어셈블리(프로젝트) 내에서 접근 가능 — 최상위 클래스의 기본값
  • protected internal: 같은 어셈블리 또는 파생 클래스에서 접근 가능
  • private protected: 같은 어셈블리 안에 있는 파생 클래스에서만 접근 가능(C# 7.2 이상)

주의할 점은 네스트되지 않은 클래스 자체의 기본 접근 한정자는 internal이라는 것입니다. 반면 클래스 내부의 멤버는 한정자를 명시하지 않으면 private이 됩니다.

마무리

C#의 기본 접근 한정자인 private은 캡슐화 원칙을 지키는 데 핵심적인 역할을 합니다. 필드는 가급적 private으로 숨기고, 외부 노출이 필요한 경우 public 메서드나 속성(property)을 통해 제어된 방식으로 제공하는 것이 안전하고 유지보수하기 좋은 설계 습관입니다.