Overview

결국 하나의 인터페이스로 모든 것을 추상화하기 어렵기 때문에 어댑터 패턴을 사용합니다. 즉, 기존 라이브러리가 더 이상 실제 서비스와 호환되지 않아 다시 만들어야 하고 다른 부서에서도 이 라이브러리를 사용하고 있다고 가정해 보겠습니다. 따라서 이 라이브러리를 수정하면 다른 부서에 영향을 미칩니다. 이 경우 어댑터 패턴을 사용하여 기존 라이브러리를 건드리지 않고 새로운 기능을 추가할 수 있습니다.

특히 정책이 자주 변경되는 경우 지속적으로 라이브러리를 변경해야 합니까? 즉, 최대한 손대지 않고 구현할 수 있어야 합니다. 이 때문에 많은 사람이 개발해야 하는 오래된(?) 프레임워크나 프로그램에서 xxxAdapter라는 이름을 사용하여 기존 코드를 수정하지 않고 어댑터를 사용하는 예를 종종 볼 수 있습니다.

장점
어댑터 패턴의 주요 장점은 기존 코드를 변경할 필요가 없다는 것입니다.
기존 코드를 변경하지 않기 때문에 클래스 재사용성을 높일 수 있습니다.

불리
구성 요소의 클래스를 늘려야 하므로 복잡성이 증가할 수 있습니다.
Adapter 클래스의 경우 상속을 사용하기 때문에 유연하지 않다.
세미 네임드 객체 Adapter 의 경우 대부분의 코드를 다시 작성해야 하므로 효율적이지 않습니다.

 

Structure

https://velog.io/@kwj1270/Adapter-pattern

 

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

+ Recent posts