어댑터 패턴(Adapter Pattern)
디자인패턴 2014. 11. 11. 14:181. 어댑터 패턴이란?
어댑터 패턴에서는 한 클래스의 인터페이스(Interface)를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환(Convert)한다. 어댑터를 이용하여 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용할 수 있다.
이렇게 하여, 클라이언트와 구현된 인터페이스를 분리시킬 수 있으며, 나중에 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화(Encapsulate)되기 때문에 클라이언트는 바뀔 필요가 없어진다.
2. 어댑터 패턴 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | public interface Duck { public void quack(); public void fly(); } public class MallardDuck implements Duck { @Override public void quack() { System.out.println( "Quack" ); } @Override public void fly() { System.out.println( "I'm flying" ); } } public interface Turkey { public void gobble(); public void fly(); } public class WildTurkey implements Turkey { @Override public void gobble() { System.out.println( "Gobble gobble" ); } @Override public void fly() { System.out.println( "I'm flying a short distance" ); } } // 변환시킬 형식의 인터페이스를 구현해야 한다. public class TurkeyAdapter implements Duck { Turkey turkey; // 원래 형식의 객체에 대한 레퍼런스가 필요하다. 여기에서는 생성자에서 레퍼런스를 받아온다. public TurkeyAdapter(Turkey turkey) { this .turkey = turkey; } // 인터페이스에 있는 메소드들을 모두 구현해야 한다. @Override public void quack() { turkey.gobble(); } @Override public void fly() { for ( int i = 0 ; i < 5 ; i++) { turkey.fly(); } } } public class DuckTestDrive { /** * @param args */ public static void main(String[] args) { MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println( "The turkey says..." ); turkey.gobble(); turkey.fly(); System.out.println( "\nThe Duck says..." ); testDuck(duck); System.out.println( "\nThe TurkeyAdapter says..." ); // 오리 대신에 어댑터로 변환시킨 칠면조를 넘김. testDuck(turkeyAdapter); } static void testDuck(Duck duck) { duck.quack(); duck.fly(); } } |
참고
Head FIrst Design Pattern : 스토리가 있는 패턴 학습법
http://www.gurubee.net/pages/viewpage.action?pageId=1507401
출처 - http://digitanomad.blogspot.kr/2013/02/adapter-pattern.html
'디자인패턴' 카테고리의 다른 글
팩토리 패턴(Factory Pattern) (0) | 2014.11.11 |
---|---|
옵저버 패턴(Observer Pattern) (0) | 2014.11.11 |
데코레이터 패턴(Decorator Pattern) (0) | 2014.11.11 |
싱글톤 패턴 (0) | 2012.11.02 |
데코레이터 패턴 (0) | 2012.11.02 |