어댑터(Adapter)패턴에 대한 쉬운 예제

Choizz·2023년 2월 16일
0

디자인 패턴

목록 보기
7/8

어댑터(Adapter) 패턴

오늘은 디자인 패턴 중, 어댑터 패턴에 대해 간단한 예제를 가지고 포스팅 해보려고 한다.

어댑터 패턴이란,

한 인터페이스를 다른 인터페이스로 변환해 주는 것이라고 이해하면 된다.

간단한 코드로 이해해 보자.


코드

  • 먼저, Duck 인터페이스를 만든다.
public interface Duck {

	public void quack(); //꽥꽥거린다.

	public void fly(); // 날 수 있다.
}
  • Duck 인터페이스를 구현하는 클래스를 만든다.
public class Duck1 implements Duck {

	@Override
	public void quack() {
		System.out.println("꽥꽥");
	}

	@Override
	public void fly() {
		System.out.println("높이 날아요!");
	}
}
  • 어댑터를 통해 변환될 Chicken 인터페이스를 만든다.
public interface Chicken {

	public void kkokio(); //꼬끼오..

	public void noFly(); // 잘지 못한다.
}
  • Chicken 인터페이스를 구현하는 클래스를 만든다.
public class Chicken1 implements Chicken {

	@Override
	public void kkokio() {
		System.out.println("꼬끼오");
	}

	@Override
	public void noFly() {
		System.out.println("못 날아요!");
	}
} 
  • 구체적인 adapter 클래스를 만든다.
    • 여기서 Duck 인터페이스가 클라이언트가 요구하는 인터페이스라고 생각하면 된다.
    • 그리고 클라이언트가 요구하는 인터페이스를 다른 인터페이스(Chicken)로 변환하는 것이다.

public class Adapter implements Duck {

	private Chicken chicken;

	public Adapter(Chicken chicken) {
		this.chicken = chicken;
	}

	@Override
	public void quack() {
		chicken.kkokio();
	}

	@Override
	public void fly() {
		chicken.noFly();
	}
}
  • 실행
    • (1) 코드를 보면, Adapter 클래스에 chicken1 인스턴스를 주입한다. 그리고 Adapter 객체의 타입은 Duck이다.
      • 클라이언트는 Duck 바라보고 Duck 타입의 객체에게 할 일을 위임하지만, 실행되는 코드는 chicken1에 구현된 메서드들이다.
      • 즉 Duck 인터페이스에서 Chicken 인터페이스로 전환이 이루어 진것이다.

public static void main(String[] args) {
	Duck duck1 = new Duck1();

	duck1.quack();
	duck1.fly();

	System.out.println("================");

	Chicken chicken1 = new Chicken1();
	//(1)
	Dcuk chickenAdapter = new Adapter(chicken1); 

	chickenAdapter.quack();
	chickenAdapter.fly();
}

//결과
  꽥꽥
  높이 날아요!
          ================
  꼬끼오
  못 날아요!

정리

  • 어댑터 패턴을 통해, 클라이언트 코드의 변경없이 다른 인터페이스로 변환이 가능하다. 인터페이스를 변환해주는 어댑터를 만들면 되기 때문이다.

Reference

profile
집중

0개의 댓글