인터페이스 상속받을때 클래스명

2024. 10. 2. 14:42카테고리 없음

내가 사용하고 있는 Scene 인터페이스의 구조

public interface Scene
{
    int Start();
}

 

Scene을 상속받을 클래스

public class MainScene : Scene
{
    private Display display;

    // 메인 신 시작
    int Scene.Start()
    {
        display = new MainDisplay();

        display.Display();
        display.Select();


        return 0;
    }
}

 

인터페이스 상속을 받은 클래스에서 인터페이스 내에 있는 함수를 정의할때의 사용방법2가지

1. int Scene.Start()     ( 명시적 ) ( 함수를 직접 호출 할 수 없다. )

Scene.Start() 이렇게 작성한 이유는 Scene 인터페이스 안에 있는 Start메서드를 구현한거라는 뜻 입니다.

 

명시적으로 인터페이스를 구현하면, 해당 메서드는 인터페이스의 인스턴스로만 호출할 수 있게 됩니다. 이는 클래스 외부에서 메서드의 사용을 제한하고, 특정 인터페이스 컨텍스트에서만 동작하게 만들고 싶을 때 유용합니다. 하지만 이 방식으로 구현하면 클래스의 인스턴스(MainScene)에서 해당 메서드를 직접 호출할 수 없고, 

Scene scene = new MainScene();

scene.Start();

인터페이스 타입을 사용해야 호출 가능합니다.

왜냐하면 Start()함수는 Scene인터페이스가 가지고 있는 메서드이기 때문입니다.

장점

 

  • 인터페이스를 구현한 클래스가 다른 동일한 메서드 이름을 사용할 경우 충돌을 방지할 수 있습니다.
  • 인터페이스에 종속적인 메서드임을 명확히 할 수 있습니다.

 

단점

  • 해당 메서드를 클래스 자체의 인스턴스로는 직접 호출할 수 없습니다.

2. public int Start()     ( 암시적 ) ( 함수를 직접 호출 할 수 있다. )

암시적으로 인터페이스를 구현하면, 클래스 외부에서 메서드를 직접 호출할 수 있습니다. 이는 일반적으로 더 많이 사용되는 방식이며, 클래스의 인스턴스를 통해 자유롭게 메서드를 호출할 수 있습니다.

 

MainScene main = new MainScene();
main.Start();

이렇게 호출할 경우

public int Start() 와 같이 사용할 수 있다.

장점

 

  • 클래스 외부에서 쉽게 호출할 수 있어 코드 작성이 편리해집니다.
  • 인터페이스와 무관하게 해당 메서드를 호출할 수 있습니다.

 

단점

  • 동일한 메서드 이름이 충돌할 가능성이 있으며, 이 경우 명시적으로 메서드 구분을 해야 합니다.

 

정리

명시적 구현은 좀 더 엄격한 제어가 필요할 때 유용하고, 암시적 구현은 호출의 편리함을 제공합니다.

예를 들어, 클래스 외부에서 인터페이스 메서드를 직접 사용할 필요가 있는 경우에는 암시적 구현을, 인터페이스로만 해당 메서드를 관리하고 싶을 경우에는 명시적 구현을 사용하는 것이 바람직합니다.