본문 바로가기
프로그래밍/디자인 패턴(프로그래밍)

[Design Pattern]Adapter Pattern이란?

by 그래도동 2019. 1. 18.
728x90
반응형

Adapter Pattern이란?

 관계가 없는 인터페이스들이 같이 일할 수 있도록 도와주는 패턴이다.

 두개의 인터페이스를 이어주는 인터페이스를 adapter라 한다.


예제

public class Line { private int lines; public Line(int line) { this.lines = line; } public int GetLines() { return this.lines; } public int SetLines(int line) { this.lines = line; } } public class Station { public Line GetLine() { return new Line(1); } }

Station클래스는 1호선만 다닐 수 있다. 하지만 4호선 9호선도 같이 다닐 수 있으면 좋겠다면 위에 두 클래스를 이어주는 adapter클래스를 만들어 보자.

public interface StationAdapter { public Line Get1Line(); public Line Get4Line(); public Line Get9Line(); }

이제 위 Adapter를 사용하여 구현해보자.


Class Adapter Implementation

public class StationClassAdapterImpl extends Station implements StationAdapter

{ public Line Get1Line()

{ return GetLine(); } public Line Get4Line()

{

int currentLine = GetLine(); return ConvertLine(currentLine, 4);

} public Line Get9Line()

{

int currentLine = GetLine(); return ConvertLine(currentLine, 9); } public Line ConvertLine(int currLine, int convertline)

{

print(string.format("{0}호선에서 {1}호선으로 변경됩니다", currLine, convertline);

return new Line(convertline); } }

java나 c#은 다중상속을 허용하지 않는다. 그래서 extends와 implements를 사용하여 다중상속을 흉내낸다.

Station을 확장함으로써 Station의 메소드를 별도의 인스턴스 생성없이 사용할 수 있다.


Object Adapter Implementation

public class StationClassAdapterImpl implements StationAdapter { private Station station = new Station(); public Line Get1Line() { return GetLine(); } public Line Get4Line() { int currentLine = station.GetLine(); return ConvertLine(currentLine, 4); } public Line Get9Line() { int currentLine = station.GetLine(); return ConvertLine(currentLine, 9); } public Line ConvertLine(int currLine, int convertline) { Console.WriteLine(string.format("{0}호선에서 {1}호선으로 변경됩니다", currLine, convertline)); return new Line(convertline); } }

class adapter에서 사용되었던 extends대신 클래스 내부에 station 인스턴스를 생성한 것이 차이점이다.



Reference

 https://blog.seotory.com/post/2017/09/java-adapter-pattern


728x90
반응형

댓글