[디딤돌 C++] 35. 인터페이스 (INTERFACE)

이번에는 인터페이스(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;
}

▷ 실행 결과

홍길동 연주하다.