프로그래밍

인터페이스의 접근 제한자

우대비 2025. 2. 17. 12:38
반응형

C#에서 인터페이스를 구현할 때, 접근 제한자 문제로 인해

IMouseListener.OnClick();

처럼 인터페이스명을 붙여야 하는 경우와,

 public void OnClick()

처럼 바로 사용할 수 있는 경우가 있습니다. 두 방식의 차이를 설명하겠습니다.

 

 

🔹 1. 인터페이스에서 접근 제한자가 없는 이유

C#에서 인터페이스를 정의할 때, 메서드에 접근 제한자(public, private, protected 등) 를 명시할 수 없습니다.
이유는 인터페이스는 구현이 아니라 설계만 정의하는 개념이기 때문입니다.

public interface IMouseListener
{
    void OnClick();  // 접근 제한자 X
}

 

 

 

🔹 2. 인터페이스는 무조건 public을 강제

인터페이스를 구현하는 클래스는 해당 메서드를 외부에서 호출할 수 있도록 public으로 선언해야 합니다.

public class Player : IMouseListener
{
    public void OnClick()  // public 필수
    {
        Console.WriteLine("클릭 감지!");
    }
}

 

만약 public을 사용하지 않고 private이나 protected로 선언하면 오류가 발생합니다.

public class Player : IMouseListener
{
    private void OnClick() // ❌ 오류 발생
    {
        Console.WriteLine("클릭 감지!");
    }
}

 

 

3. 인터페이스에 접근 제한자가 있으면 문제가 되는 이유

✅ (1) 인터페이스의 본래 목적과 충돌

인터페이스는 클래스가 반드시 제공해야 하는 기능을 정의하는 것이 목적입니다.
그런데 만약 private 메서드를 선언할 수 있다면, 그 메서드는 클래스 외부에서 호출할 수 없게 됩니다.
그렇다면 인터페이스를 구현하는 의미가 없어집니다.

 

✅ (2) 다형성(Polymorphism) 활용 불가능

인터페이스를 사용하는 가장 큰 이유 중 하나는 다형성(polymorphism) 입니다.
즉, 인터페이스를 통해 다양한 객체를 동일한 방식으로 다룰 수 있어야 합니다.

public class Player : IMouseListener
{
    public void OnClick()
    {
        Console.WriteLine("클릭 감지!");
    }
}

public class Enemy : IMouseListener
{
    public void OnClick()
    {
        Console.WriteLine("적 클릭 감지!");
    }
}

// 다형성 활용
IMouseListener listener = new Player();
listener.OnClick();  // "클릭 감지!" 출력

 

 

🔹 4. 결론: 인터페이스에는 접근 제한자가 필요 없는 이유

✔ 인터페이스는 구현이 아니라 "설계"를 정의하는 역할이므로 접근 제한자가 필요하지 않음
✔ 인터페이스를 구현하는 클래스가 해당 기능을 반드시 제공하도록 강제하기 위해, 자동으로 public이 적용됨
✔ 인터페이스를 통한 다형성을 활용하려면, 메서드는 반드시 외부에서 접근 가능해야 함
✔ 만약 private이나 protected가 허용된다면, 인터페이스를 구현하는 의미가 없어지고 다형성을 사용할 수 없게 됨

 

따라서 C#에서는 인터페이스 메서드에 접근 제한자를 명시할 수 없고, 이를 구현하는 클래스에서는 public으로만 선언할 수 있도록 강제하는 것입니다.

반응형
LIST

'프로그래밍' 카테고리의 다른 글

Behavior Tree 이론  (2) 2025.04.10
Github 협업 전략 [Github Desktop]  (0) 2025.02.06