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으로만 선언할 수 있도록 강제하는 것입니다.
'프로그래밍' 카테고리의 다른 글
Behavior Tree 이론 (2) | 2025.04.10 |
---|---|
Github 협업 전략 [Github Desktop] (0) | 2025.02.06 |