ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Design Pattern] Adapter Pattern 어댑터 패턴
    Study/Design Pattern 2021. 7. 18. 01:15

     

    어댑터 패턴이란 어떤 인터페이스를 상속받는 클래스를 다른 인터페이스로 변환하여 사용하고자 할 때 사용되는 디자인 패턴이다. 이를 통해 관계가 없는 인터페이스들을 같이 사용 가능하고, 클래스의 재활용성이 증가하는 장점이 있다.

     

     

    // Human 인터페이스
    public interface Human{
    	public void talk();
        public void walk();
    }
    
    
    // 구현 class
    public class Asian implements Human{
    	@Override
        public void talk(){
        	System.out.println("I am an Asian");
        }
        public void walk(){
        	System.out.println("Asian walks");
        }
    }
    // Dog 인터페이스
    public interface Dog{
    	public void bark();
        public void walk();
    }
    
    
    // 구현 class
    public class Poodle implements Dog{
    	@Override
        public void bark(){
        	System.out.println("wak wak!");
        }
        public void walk(){
        	System.out.println("Poodle walks");
        }
    }

     

    위와 같이 Human, Dog 인터페이스를 각각 상속받는 Asian, Poodle 클래스가 존재한다고 생각해 봅시다. 그런데 만약 개를 사람처럼 다뤄야 하는 상황이라서 Dog 대신 Human 객체를 사용해야 하는 상황이라면, 인터페이스가 서로 다르기 때문에 바로는 사용을 불가능합니다. 그래서 아래와 같이 어댑터 클래스를 구현해 줄 필요가 있습니다.

     

    public class DogAdapter implements Human{
    	private Dog dog;
        
        public DogAdapter(Dog dog){
        	this.dog = dog;
        }
        
        @Override
        public void talk(){
        	dog.bark();
        }
        
        @Override
        public void walk(){
        	dog.walk();
        }
    }
    Dog poodle = new Poodle();
    poodle.bark();  // wak wak!
    
    Human poodleAdapter = new DogAdapter(poodle);
    poodleAdapter.talk(); // wak wak!

     

    위 코드처럼 기존 dog 클래스 코드를 전혀 수정하지 않아도 타겟 인터페이스(Human)에 맞춰서 동작하는 것을 확인할 수 있다. 이를 통해 만약 프로젝트 중간부터 새로운 신 클래스를 사용한다 하더라도 기존 구식 클래스 객체들을 Adapter를 통해 신식으로 작동하게 할 수 있는 등 다양하게 활용할 수 있다.

    댓글

Designed by Tistory.