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
'프로그래밍 > 디자인 패턴(프로그래밍)' 카테고리의 다른 글
[Design Pattern]Composite Pattern이란? (0) | 2019.01.18 |
---|---|
[Design Pattern]Bridge Pattern이란? (0) | 2019.01.18 |
[Design Pattern]Prototype Pattern이란? (0) | 2019.01.17 |
[Design Pattern]Builder Pattern이란? (0) | 2019.01.17 |
[Design Pattern]Abstract Factory Pattern이란? (0) | 2019.01.17 |
댓글