interface를 사용한 종속성 최소화

Posted 2012. 12. 27. 14:29

자신의 기능을 노출 시키자

1. 하나의 인터페이스는 서비스를 제공하는 하나 이상의 메소드를 정의

2. COM 개체는 반드시 하나의 IUnknown 인터페이스를 제공

3. COM 개체의 고유한 기능을 노출하는 하나 이상의 인터페이스 제공

4. 순수가상함수만을 멤버로 포함하는 추상클래스의 모임

5. 인터페이스를 상속받은 인터페이스의 가상함수는 반드시 전부 재정의 해야 한다.

 

#include <iostream>

 

class ICall

{

public:

virtual ~ICall(){};

virtual void call () = 0;

};

 

class callme : pulic ICall

{

public:

~callme(){};

void call(){ std::cout << " call me " << std::endl; };

};

 

class user

{

public:

void what( ICall* ic ){ ic->call(); };

};

 

void main()

{

callme* c = new callme;

user u;

u.whet(c);

}

이렇게 되면 .h파일을 include해 줘야 하며 컴파일도 새로 해야 하며 종속적이게 된다.

 

마소의 COM/DCOM 에서는 아래와 같이 구현 함으로 include 및 컴파일 속도 종속성을 해결해 줄수있다

 

interface ICall                        // call에 대한 interface 생성

{

virtual ~ICall(){};

virtual void call() = 0;

};

 

class callme : public ICall

{

public:

~callme(){};

void call(){ std::cout << "call me" << std::endl; };

};

 

class user

{

public:

void what( ICall* ic ) { ic->call(); };

};

 

void main()

{

callme* c = new callme;

user u;

u.what(c);

}

 

//---------------------------------------

인터페이스와 추상클래스의 차이점

추상 클래스( abstract class )

1.추상 클래스가 되려면 추상 메소드가 1개 이상인 클래스(단, 추상 field는 없다)

-> ( void make() )

2. 추상 클래스를 상속했지만 추상 메소드를 오버라이딩 하지 않거나 인터페이스를 구현했지만

메소드를 구현하지 않았을때

3. 특정 메소드를 강제로 상속하여 사용하려는 경우

4. 특징

1. 자기자신의 이름으로 자기자신을 생성 할 수 없다.

2. 추상 클래스를 상속한 자식 클래스의 객체를 생성하여 사용한다.

3. 선언과 구현을 분리 시킨다.

4. 부모는 자식보다 추상적 또는 일반적이다.

5. 부모의 메소드를 자식의 특징에 맞게 오버라이딩 한다.

 

인터페이스( interface )

1. 인터페이스가 되려면 abstract method로만 이루어진 클래스

2. void show();와 같이 바디( {} ) 를 붙이지 않는다.

   메소드 이름을 나열한다.

3. private은 사용하지 말고 기본 접근 제한자 이상을 사용하자.

   void show(); 는 public abstract void show(); 가 된다. 그래서 추상 메소드라 불린다.

4. 변수는 자동으로 상수가 된다.

-> int a = 1; ==> public final static int a = 1;

5. 인터페이스의 추상 메소드를 구현하지 못하면 자식 클래스는 추상클래스가 된다.

6. 인터페이스가 여러개일때 ","을 사용 한다.

-> A implements IC, ID

7. 상속이 우선이다

-> A extends B implements IC, ID

8. 인터페이스는 여러개의 인터페이스를 상속 할 수 있다.

-> ex IA extends IC, ID

9. 자기 자신의 이름으로 자기자신을 생성 할 수 없다.

10. 커플링을 떨어뜨린다.

11. 선언과 구현을 분리 시킨다.

12. 다중상속을 흉내낸다.

 

 

 

 

'C++' 카테고리의 다른 글

깊은복사 얕은 복사  (0) 2012.09.04
스마트 포인터  (0) 2012.09.04