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() 와 같이 사용할 수 있다.
장점
- 클래스 외부에서 쉽게 호출할 수 있어 코드 작성이 편리해집니다.
- 인터페이스와 무관하게 해당 메서드를 호출할 수 있습니다.
단점
- 동일한 메서드 이름이 충돌할 가능성이 있으며, 이 경우 명시적으로 메서드 구분을 해야 합니다.
정리
명시적 구현은 좀 더 엄격한 제어가 필요할 때 유용하고, 암시적 구현은 호출의 편리함을 제공합니다.
예를 들어, 클래스 외부에서 인터페이스 메서드를 직접 사용할 필요가 있는 경우에는 암시적 구현을, 인터페이스로만 해당 메서드를 관리하고 싶을 경우에는 명시적 구현을 사용하는 것이 바람직합니다.