목차
1. 어댑터 패턴 (Adepter Pattern)이란?
2. 어댑터 패턴 구조
3. 예제
어댑터 패턴 (Adepter Pattern)이란?
220v 에서 작동하는 가전제품을 110v 에서 작동하도록 하려면 어떻게 해야할까요?
바로 110v 어댑터를 사용하는 것입니다.
이처럼 어댑터 패턴은 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 해주어
기존의 코드를 수정하지 않고 재사용 할 수 있도록 도와주는 구조적 디자인 패턴입니다.
어댑터 패턴 구조
이름 | 내용 |
Animal | 새롭게 만들어진 추상클래스 |
Dog | Animal을 상속받은 강아지 클래스 |
Cat | Animal을 상속받은 고양이 클래스 |
Tiger | 기존 코드 |
TigerAdapter | Animal과 연결을 도와줄 Adapter 클래스 |
Animal 클래스
public abstract class Animal {
private String name;
public Animal(String name){
this.name = name;
}
public abstract void sound();
}
Dog 클래스
public class Dog extends Animal{
public Dog(String name){
super(name);
}
@Override
public void sound() {
System.out.println(name + " 멍멍");
}
}
Cat 클래스
public class Cat extends Animal{
public Cat(String name){
super(name);
}
@Override
public void sound() {
System.out.println(name + " 야옹");
}
}
Tiger 클래스
Tiger 클래스는 기존 Cat, Dog 와 다른 형태의 클래스입니다.
이 클래스를 Cat, Dog 와 같이 사용할 수 있도록 TigerAdapter 클래스를 만들어 사용할 것입니다.
public class Tiger {
private String name;
void setName(String name){
this.name = name;
}
String getName(){
return name;
}
void roar() {
System.out.println(name + " 어흥");
}
}
TigerAdapter 클래스
Tiger 클래스와 Animal 클래스를 연결해주기 위해 만든 Adapter 클래스 입니다.
Tiger 클래스를 필드로 가져 Animal 클래스의 sound 메서드에 Tiger 클래스의 roar 메서드를 실행시켜줍니다.
public class TigerAdapter extends Animal{
public Tiger tiger;
public TigerAdapter(String name){
super(name);
this.tiger = new Tiger();
tiger.setName(name);
}
@Override
public void sound() {
tiger.roar();
}
}
Main 클래스
Animal 리스트를 받아서 각 Animal 들의 소리를 출력하는 코드를 작성해보았습니다.
Adapter 를 통해 Animal 과 관련이 없는 Tiger 클래스를 Animal 과 연결시켜주어 코드의 수정 없이 동작하게 되었습니다.
public class Main {
public static void main(String[] args) {
ArrayList<Animal> animals = new ArrayList<>();
animals.add(new Dog("강아지"));
animals.add(new Cat("고양이"));
// Tiger tiger = new Tiger();
// tiger.setName("호랑이");
// animals.add(tiger);
animals.add(new TigerAdapter("호랑이"));
animals.forEach( animal -> {
animal.sound();
});
}
}
실행 결과
강아지 멍멍
고양이 야옹
호랑이 어흥
참조
https://jake-seo-dev.tistory.com/379
https://www.youtube.com/watch?v=7MSzyqhrO-A&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=5
'Design Pattern > 구조(Structural) 패턴' 카테고리의 다른 글
11. 방문자 패턴 Visitor Pattern (1) | 2023.11.12 |
---|---|
10. 데코레이터 패턴 / Decorator Pattern (0) | 2023.11.08 |
8. 프록시 패턴 / Proxy Pattern (1) | 2023.11.03 |
6. 브리지 패턴 (Bridge Pattern) (2) | 2023.11.01 |
4. 컴포지트 패턴 (Composite Pattern) (0) | 2023.10.30 |