본문 바로가기
Programming/C#

C# 접근제한자 클래스 멤버의 가시성 관리하기

by Dev_카페인 2024. 6. 9.
반응형

[C#] 접근제한자: 클래스 멤버의 가시성 관리하기

안녕하세요! 이번 포스트에서는 C#의 접근제한자(Access Modifiers)에 대해 자세히 알아보겠습니다. 접근제한자는 클래스, 메서드, 필드 등 멤버의 가시성을 제어하여 코드의 안전성과 캡슐화를 향상시킵니다.

접근제한자란 무엇인가요?

접근제한자는 클래스 또는 클래스 멤버(필드, 메서드, 속성 등)의 접근 수준을 정의하는 키워드입니다. 이를 통해 외부 코드에서 클래스 내부의 특정 멤버에 접근할 수 있는지를 결정할 수 있습니다.

주요 접근제한자

C#에서 사용되는 주요 접근제한자는 다음과 같습니다:

  1. public: 모든 곳에서 접근할 수 있습니다.
  2. private: 동일한 클래스 내에서만 접근할 수 있습니다.
  3. protected: 동일한 클래스 및 해당 클래스를 상속받은 자식 클래스에서 접근할 수 있습니다.
  4. internal: 동일한 어셈블리 내에서만 접근할 수 있습니다.
  5. protected internal: 동일한 어셈블리 내에서 또는 해당 클래스를 상속받은 자식 클래스에서 접근할 수 있습니다.
  6. private protected: 동일한 어셈블리 내에서 상속받은 자식 클래스에서만 접근할 수 있습니다.

접근제한자의 사용 예시

다음은 접근제한자를 사용하는 예시입니다.

public class Example
{
    public int PublicField; // 어디서나 접근 가능
    private int PrivateField; // 클래스 내부에서만 접근 가능
    protected int ProtectedField; // 상속받은 클래스에서 접근 가능
    internal int InternalField; // 동일한 어셈블리 내에서 접근 가능
    protected internal int ProtectedInternalField; // 동일한 어셈블리 내 또는 상속받은 클래스에서 접근 가능
    private protected int PrivateProtectedField; // 동일한 어셈블리 내에서 상속받은 클래스에서만 접근 가능

    public void PublicMethod() 
    {
        // 어디서나 접근 가능
    }

    private void PrivateMethod() 
    {
        // 클래스 내부에서만 접근 가능
    }

    protected void ProtectedMethod() 
    {
        // 상속받은 클래스에서 접근 가능
    }

    internal void InternalMethod() 
    {
        // 동일한 어셈블리 내에서 접근 가능
    }

    protected internal void ProtectedInternalMethod() 
    {
        // 동일한 어셈블리 내 또는 상속받은 클래스에서 접근 가능
    }

    private protected void PrivateProtectedMethod() 
    {
        // 동일한 어셈블리 내에서 상속받은 클래스에서만 접근 가능
    }
}

접근제한자의 활용

캡슐화 (Encapsulation)

접근제한자를 사용하면 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 보호할 수 있습니다. 이는 데이터의 무결성을 유지하고, 클래스의 내부 구현을 변경하더라도 외부 코드에 영향을 주지 않도록 합니다.

public class BankAccount
{
    private decimal balance; // 외부에서 직접 접근 불가

    public void Deposit(decimal amount)
    {
        if (amount > 0)
        {
            balance += amount;
        }
    }

    public decimal GetBalance()
    {
        return balance;
    }
}

상속과 접근제한자

상속 관계에서 접근제한자는 매우 중요한 역할을 합니다. protected 접근제한자를 사용하면, 자식 클래스에서 부모 클래스의 멤버에 접근할 수 있습니다.

public class Animal
{
    protected string name;

    public Animal(string name)
    {
        this.name = name;
    }

    public void Display()
    {
        Console.WriteLine("Name: " + name);
    }
}

public class Dog : Animal
{
    public Dog(string name) : base(name)
    {
    }

    public void Bark()
    {
        Console.WriteLine(name + " is barking!");
    }
}

접근제한자와 인터페이스

인터페이스의 모든 멤버는 기본적으로 public입니다. 따라서 인터페이스에서 접근제한자를 명시할 필요가 없습니다.

public interface IShape
{
    void Draw();
    double CalculateArea();
}

마치며

이번 포스트에서는 C#의 접근제한자에 대해 알아보았습니다. 접근제한자는 클래스와 클래스 멤버의 가시성을 제어하여 코드의 안전성과 캡슐화를 향상시킵니다. 이를 통해 객체지향 프로그래밍의 원칙을 더 잘 구현할 수 있습니다. 추가적인 질문이나 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!

반응형