본문 바로가기

프로그래밍/디자인패턴

[디자인패턴] Adapter Patten


Adapter Patten 

어댑터 패턴



어댑터 패턴을 하기전에 이걸 구분하자.

class내에 멤버 변수 또는 함수에 접근가능하게 하는 것은 접근 지정자이고, 

상속시 사용하는 것을 접근 변경자라고 한다.


이 접근 변경자를 어떤 것으로 선정하는 가가 중요하다.


public 상속을 하면, c만 public이 된다.

protected 상속을 하면 public c가 protected c가 된다. 

private 상속은 모든 변수를 private으로 만든다.


모든 변수를 private으로 만드는 private 접근 변경자는 왜 사용하는 것일까?

이는

부모로부터 구현은 물려받지만, ( 자식이 내부적으로 사용하지만 )

인터페이스는 물려받지 않겠다. ( 부모 함수를 외부에 노출하지는 않겠다. )  라는 뜻이다.



만약, 사용자가 stack을 요구한다. 이미 있지만, 없다고 치자 :) 

우리가 알고있는 list를 한쪽으로 사용하면 stack이다. 그러므로 list를 재사용해서 stack을 만들어보자.


1. 상속


list 내의 push_back()과 pop_back() 을 각각 push()와 pop()으로 바꿨다. 

private 상속이여도 함수 내에서 부른 것이기 때문에 list<int> 내의 함수 push_back을 쓸 수 있다. 


1번의 stack class는 int만 쓸 수 있기때문에, template으로 바꿔주는 것이 좋겠다.


1-1. template 상속


1-1은 list를 상속으로 stack을 만든 것이다.

이 class로 객체를 생성하면




위 그림처럼 사용할 수 없는 ( private 상속을 했으니까 ) 함수들이 모두 보인다.

쓸 수도 없는 것을 보여줄 필요는 없기 때문에 숨기고 싶다. 어떻게 해야할까??



소프트웨어의 재사용에는 상속과 포함이 있다. 그리고 포함이 더 좋을 때가 많다.

1-1은 private으로 상속했음에도 불구하고 그 부모의 함수명이 보인다.

포함을 사용하므로써 부모 함수의 이름을 감출 수 있다. 



2. 포함





포함을 사용하면 구현한 함수만 보여서 상속을 한 것보다 낫다.



서두가 길었지만, 정리할 수 있다. 


list를 재사용해 stack을 만든 것 처럼

기본 클래스의 인터페이스를 변경해서 사용자가 요구하는 새로운 클래스를 만드는 패턴이 Adapter Patten이다.

220v의 전기를 110v로 바꿔주는 돼지코가 가장 적절하다.