언어 자료구조 알고리즘/디딤돌 C++

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

언제나휴일 2016. 4. 25. 00:36
반응형


인터페이스 (INTERFACE)

이번에는 인터페이스(interface)를 살펴볼게요.

 

인터페이스는 특정 기능을 구현할 것을 약속한 추상 형식을 말합니다. Java C# 등의 다른 OOP언어에서는 인터페이스 형식을 제공합니다.

 

C++언어에서는 인터페이스 형식을 제공하지는 않지만 순수 가상 메서드를 이용하여 정의할 수 있습니다.

 

인터페이스는 멤버 필드나 구체적으로 구현한 메서드를 갖지 않고 특정 기능을 약속한 메서드만 갖습니다. 그리고 모든 멤버는 사용하는 개발자와의 약속으로 모든 멤버를 public으로 접근 지정합니다.

 

C++언어에서는 구조체는 디폴트 가시성이 public이어서 구조체를 이용하여 인터페이스를 정의하는 이들도 많습니다.


Program.cpp


#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


//인터페이스 정의를 통해 같은 방법으로 다양한 형식 개체 사용

//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;

}

 

▷ 실행 결과

홍길동 연주하다.

반응형