-
[디자인 패턴] Adapter 패턴Programming Language/java 2023. 8. 19. 16:23
1. Adpater 패턴이 언제 사용하고
2. Adapter 패턴을 어떻게 사용할까?
가령 기존 사용하고 있던 클래스 혹은 라이브러리 A가 있다고 하자.
이 A를 새로운 클래스 B에 편입시켜서 그대로 A의 기능을 사용하고자 할 때 Adapter 패턴이 사용된다.
A를 Wrapping 하는 행위와 마찬가지여서 Wrapper 패턴이라고도 한다.
구현하는 방법은 2가지가 있는데 클래스(상속)을 사용한 패턴, 객체(인스턴스)를 사용한 패턴이 있다.
클래스를 사용한 패턴
public class A { public A(String str) { } public void method1() { ... } public void method2() { ... } }
기존 클래스 A가 존재하고
public interface NewLibrary { public void newMethod1(); public void newMethod2(); } public class B extends A implements NewLibrary { public B(String str) { super(str); } @Override public void newMethod1() { method1(); // 기존 A의 기능 그대로 사용 } @Override public void newMethod2() { method2(); // 기존 A의 기능 그대로 사용 } }
상속 받은 A의 메소드를 인터페이스에 정의한 새로운 메소드로 감싸서 기존 A의 기능을 사용한다.
(굳이 인터페이스가 필요한 이유는 뭘까?)
인스턴스를 사용한 패턴은 다음과 같다.
public class B implements NewLibrary { private A a; public B(A a) { this.a = a; } @Override public void newMethod1() { a.method1(); } @Override public void newMethod2() { a.method2(); } }
기존 A의 기능들을 인터페이스로 정의하거나 추상클래스로 정의한다. (둘의 차이는 없는 듯하다)
B의 내부에 A의 객체를 가지면서 A의 기능을 제공한다.
상속을 효과적으로 사용하기 어려운 경우가 많기 때문에
상속 방식보다 객체를 사용하는 방식이 (위임) 문제가 적다.
'Programming Language > java' 카테고리의 다른 글
[디자인 패턴] Factory Method 패턴 (0) 2023.08.20 [디자인 패턴] Template Method 패턴 (0) 2023.08.20 [디자인 패턴] Iterator 패턴 (0) 2023.08.19 Thread start() run() 차이 (0) 2022.06.26 JAVA - 클래스변수, 인스턴스변수, 지역변수 (0) 2021.01.05