728x90
Overview
결국 하나의 인터페이스로 모든 것을 추상화하기 어렵기 때문에 어댑터 패턴을 사용합니다. 즉, 기존 라이브러리가 더 이상 실제 서비스와 호환되지 않아 다시 만들어야 하고 다른 부서에서도 이 라이브러리를 사용하고 있다고 가정해 보겠습니다. 따라서 이 라이브러리를 수정하면 다른 부서에 영향을 미칩니다. 이 경우 어댑터 패턴을 사용하여 기존 라이브러리를 건드리지 않고 새로운 기능을 추가할 수 있습니다.
특히 정책이 자주 변경되는 경우 지속적으로 라이브러리를 변경해야 합니까? 즉, 최대한 손대지 않고 구현할 수 있어야 합니다. 이 때문에 많은 사람이 개발해야 하는 오래된(?) 프레임워크나 프로그램에서 xxxAdapter라는 이름을 사용하여 기존 코드를 수정하지 않고 어댑터를 사용하는 예를 종종 볼 수 있습니다.
장점
어댑터 패턴의 주요 장점은 기존 코드를 변경할 필요가 없다는 것입니다.
기존 코드를 변경하지 않기 때문에 클래스 재사용성을 높일 수 있습니다.
불리
구성 요소의 클래스를 늘려야 하므로 복잡성이 증가할 수 있습니다.
Adapter 클래스의 경우 상속을 사용하기 때문에 유연하지 않다.
세미 네임드 객체 Adapter 의 경우 대부분의 코드를 다시 작성해야 하므로 효율적이지 않습니다.
Structure

Code Example
package com.example.design.pattern.core;
interface Duck {
void quack();
void fly();
}
class MallardDuck implements Duck {
@Override
public void quack() {
System.out.println("Quack quack...");
}
@Override
public void fly() {
System.out.println("Fly...");
}
}
interface Turkey {
void gobble();
void fly();
}
class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("Gobble gobble...");
}
@Override
public void fly() {
System.out.println("Short distance flight...");
}
}
class TurkeyAdapter implements Duck {
private final 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 MyAdapter {
public static void main(String[] args) {
Duck duck = new MallardDuck();
Turkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
System.out.println("----Turkey");
turkey.gobble();
turkey.fly();
System.out.println("----Duck");
testIt(duck);
System.out.println("----Turkey Adapter");
testIt(turkeyAdapter);
}
public static void testIt(Duck duck) {
duck.quack();
duck.fly();
}
}
Console Result
----Turkey
Gobble gobble...
Short distance flight...
----Duck
Quack quack...
Fly...
----Turkey Adapter
Gobble gobble...
Short distance flight...
Short distance flight...
Short distance flight...
Short distance flight...
Short distance flight...
Conclusion
N/A
728x90
'Java Design Pattern' 카테고리의 다른 글
[ENG][디자인패턴]Facade 패턴 이론과 설명 (0) | 2022.06.20 |
---|---|
[ENG][디자인패턴]Command 패턴 이론과 설명 (0) | 2022.06.18 |
[ENG][디자인패턴]Abstract Factory 패턴 이론과 설명 (0) | 2022.06.17 |
[ENG][디자인패턴]Composite 패턴 이론과 설명 (0) | 2022.06.07 |
[ENG][디자인패턴]Template Method 패턴 이론과 설명 (0) | 2022.06.04 |
[ENG][디자인패턴]Strategy 패턴 이론과 설명 (0) | 2022.06.03 |
[ENG][디자인패턴]State 패턴 이론과 설명 (0) | 2022.06.02 |
[ENG][디자인패턴]Singleton 패턴 이론과 설명 (0) | 2022.06.01 |