인터페이스 구현(Interface Implementations)
인터페이스 구현(Interface Implementations)
인터페이스는 '약속'이니까, 그것을 구현하는 클래스는 약속한 모든 메서드를 반드시 채워야 해요. 하나라도 빠지면 컴파일러가 에러를 냅니다. 또 메서드 구현 시 이름을 꼭 맞춰야 하지만, 원하면 이름이 다른 메서드로 연결할 수도 있어요.
본문
클래스가 인터페이스를 구현할 때는 그 인터페이스의 모든 메서드를 구현해야 해요. 인터페이스의 메서드 하나라도 구현하지 않으면 컴파일러가 에러를 내요. 예를 들어 볼게요.
Type
IMyInterface = Interface
Function MyFunc : Integer;
Function MySecondFunc : Integer;
end;
TMyClass = Class(TInterfacedObject,IMyInterface)
Function MyFunc : Integer;
Function MyOtherFunc : Integer;
end;
Function TMyClass.MyFunc : Integer;
begin
Result:=23;
end;
Function TMyClass.MyOtherFunc : Integer;
begin
Result:=24;
end;
이 코드는 컴파일 에러가 나요. MySecondFunc을 구현하지 않았거든요.
Error: No matching implementation for interface method
"IMyInterface.MySecondFunc:LongInt" found
보통 인터페이스를 구현하는 메서드의 이름은 인터페이스 정의에 있는 메서드의 이름과 같아야 해요. 컴파일러는 모든 보이는 메서드에서 일치하는 메서드를 찾아요. 여기에는 클래스 자신의 메서드와, protected 이상의 가시성을 가진 부모 클래스의 메서드가 포함돼요.
하지만 인터페이스를 구성하는 메서드에 **별칭(alias)**을 제공할 수도 있어요. 즉 컴파일러에게 "이 인터페이스의 메서드는 이름이 다른 기존 메서드가 구현한다"고 알려줄 수 있어요. 이렇게 해요.
Type
IMyInterface = Interface
Function MyFunc : Integer;
end;
TMyClass = Class(TInterfacedObject,IMyInterface)
Function MyOtherFunction : Integer;
Function IMyInterface.MyFunc = MyOtherFunction;
end;
이 선언은 IMyInterface 인터페이스의 MyFunc 메서드가 TMyClass 클래스의 MyOtherFunction 메서드로 구현된다는 걸 컴파일러에게 알려줘요.
더 알아보기
- 인터페이스의 기본 정의와 규칙은 7.1 절을 참고해요.
- 인터페이스 상속은 7.4 절에서 다뤄요.
- 인터페이스 메서드를 다른 객체에 위임하는 방법은 7.5 절(인터페이스 위임)에서 확인할 수 있어요.