이번에는 인터페이스(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;
}
▷ 실행 결과
홍길동 연주하다.
'언어 자료구조 알고리즘 > 디딤돌 C++' 카테고리의 다른 글
[C++] 40. 상속과 다형성 실습2 (도형) (0) | 2016.04.25 |
---|---|
[C++] 39. 상속, 다형성 실습1 (상품, 할인 상품) (0) | 2016.04.25 |
[C++] 38. C++에서의 형 변환 (5) | 2016.04.25 |
[C++] 37. 하향 캐스팅(dynamic_cast) (0) | 2016.04.25 |
[C++] 36. 다중 상속 (0) | 2016.04.25 |
[C++] 34. 추상 클래스(ABSTRACT CLASS) (0) | 2016.04.25 |
[C++] 33. 메서드의 다형성 (virtual 키워드와 가상 메서드) (0) | 2016.04.25 |
[C++] 32. 형식의 다형성 (0) | 2016.04.25 |
[C++] 31. 다형성 개요 (0) | 2016.04.25 |
[C++] 30. 무효화 (0) | 2016.04.25 |