이번에는 인터페이스(interface)를 살펴볼게요. 인터페이스는 특정 기능을 구현할 것을 약속한 추상 형식을 말합니다. Java나 C# 등의 다른 OOP언어에서는 인터페이스 형식을 제공합니다. C++언어에서는 인터페이스 형식을 제공하지는 않지만 순수 가상 메서드를 이용하여 정의할 수 있습니다.
인터페이스는 멤버 필드나 구체적으로 구현한 메서드를 갖지 않고 특정 기능을 약속한 메서드만 갖습니다. 그리고 모든 멤버는 사용하는 개발자와의 약속으로 모든 멤버를 public으로 접근 지정합니다.
C++언어에서는 구조체는 디폴트 가시성이 public이어서 구조체를 이용하여 인터페이스를 정의하는 이들도 많습니다.
#define interface struct interface IPlay //구조체는 디폴트 가시성 { virtual void Play()=0; };
물론 class를 이용하여 인터페이스를 만들 수도 있습니다.
#define interface class interface IPlay { public: virtual void Play()=0; };
개발자들 사이에 인터페이스 이름은 I로 시작하고 I뒤에 약속하는 기능을 붙이고 있어요. 따라서 Play 기능을 약속하는 인터페이스는 IPlay라고 명명합니다. 물론 인터페이스는 여러 개의 기능을 약속할 수 있겠죠. 이 때도 대표하는 기능을 이름에 포함하세요.
물론 인터페이스를 기반으로 파생한 형식은 약속한 기능을 재정의하여 구체적으로 구현하여야 개체를 생성할 수 있습니다. 다음은 인터페이스 IPlay에서 파생한 Man 클래스에서 약속한 기능 Play를 재정의하여 사용하는 예제 코드입니다.
//인터페이스 정의를 통해 같은 방법으로 다양한 형식 개체 사용 //Program.cpp #include <iostream> #include <string> using namespace std; #define interface struct interface IPlay { virtual void Play()=0; }; class Man:public IPlay { string name; public: Man(string name) { this->name = name; } virtual void Play() { cout<<name<<" 연주하다."<<endl; } }; void Concert(IPlay *iplay) { iplay->Play(); } int main() { Man *man = new Man("홍길동"); Concert(man); delete man; return 0; }
▷ 실행 결과
홍길동 연주하다.