Adapter 패턴

·2022년 9월 29일

c++ 디자인 패턴

목록 보기
9/9

개념

: 한 클래스의 인터페이스를 유저가 사용하고자 하는
다른 인터페이스로 변환하는 것

  • 호환성 때문에 사용할 수 없었던 클래스들을 연결해서 사용할 수 있음.

만드는 방법

  1. 호환하고 싶은 헤더를 포함시킴.
  2. 다중 상속하자. - 상향 형변환이 가능하게 만들어야 함.
    : 기존의 클래스와 인클루드한 클래스를
  3. 오버라이딩 함수에서 호환 클래스의 함수를 호출하자.

problem

  • 도형을 그리는 클래스가 있음.

  • TextView라고 하는 전혀 다른 클래스가 있다고 할 때
    Shape 클래스에서 TextView의 인터페이스를 변경해서
    p->Draw 할때 같이 출력되도록 만들어라.

  • 결과


클래스 어댑터 , 객체 어댑터

error 발생

  • TextView 객체를 만들고, 위의 Shape 벡터에 push_back 이 가능할까?

: 당연히 불가능함.

  • Shape와 TextView의 메모리를 모두 가지고 있어야 하는데,
    Shape 클래스는 단독적인 클래스이므로 불가함.

  • 클래스 어댑터와 객체 어댑터로 나뉘어짐.

개념과 problem까지 설명한 것은 클래스 어댑터임.

  • 객체 어댑터를 따로 만들어야 위의 error 문제를 해결이 가능함.

만드는 방법.

  • 1번) Shape 벡터에 삽입이 가능하기 위해서 , Shape 클래스만 상속하자.
  • 2번) 인터페이스가 다른 클래스를 멤버로 포인터 변수로 가지고 있어야 함.
  • 3번) 이렇게 만든 클래스로 push_back을 하면 됨.

problem

: 만들어보아라.

1.클래스 어댑터

  • 클래스의 인터페이스를 변경함.
  • 다중 상속 또는 값으로 포함하는 경우가 많음.
  • 이미 존재하던 객체의 인터페이스를 변경할 수 없음.

2. 객체 어댑터

  • 객체의 인터페이스를 변경함.
  • 구성을 사용함.
  • 기존 객체를 포인터 또는 참조로 포함시킴.

stl에서 사용되는 어댑터 패턴

stack의 경우,

: 디폴트로 deque를 사용하고 있음.

  • stack 선언 후, push를 f12 눌러서 탐색해보면,
    push 내부에서 컨테이너 c의 멤버함수 push_back을 호출하고 있는 것을
    확인할 수 있음.

profile
🔥🔥🔥

0개의 댓글