본문 바로가기

Design Pattern/구조(Structural) 패턴

3. 어댑터 패턴 (Adapter Pattern)

목차

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