어댑터 패턴이란 매우 간단한 패턴이다. 기존에 있는(adaptee)것을 클라이언트 자신이 원하는 방식으로 사용해 주기 위해서 자신이 원하는 방식을 인터페이스로 만들어주고 새로운 클래스를 하나 만들어 그 클래스가 자신이 원하는 인터페이스를 implement해주고 기존에 있는 것을 has-a로 넣어 주는 것이 어댑터 패턴이다.
클라이언트가 adaptee(A)를 자기가 원하는 B타입으로 사용할 수 있게 해주는 것입니다. 여기서 이미 제공되어 있는것(A)의 메서드 이름과 매개변수가 필요한 것(B)의 그것과 다를 수 있다. 이 다른것을 맞추어 주기 위해 어댑터 패턴을 쓰는 것임.
아… 이제 이해가 간다. 이미 있는 것을 자신이 원하는 방식대로 쓸 수 있게 해주기 위해서 자신이 원하는 방식을 인터페이스로 여기고 구현하는 것(implements)이고 이미 있는 것을 내가 원하는 대로 쓸수 있어야 하기 때문에 이미 있는 것을 has-a관계로 두고 원하는 방식을 구현할 때 그 기존에 있는 것의 함수로 구현하는 것이다!!!(나누어준 예제보면 바로 이해함)
/**
* 플러그 가능 어댑터: 객체 어댑터
* 서로 다른 이름으로 정의된 메소드를 모두 foo 이름을 통해 호출하고자 함
* Cat::meow, Dog::bark, Frog::croak
* 실제 어댑티를 유지하는 것이 아님.
* 특정 객체의 특정 메소드를 호출하는 메소드를 유지함
*/
public class Adapter implements Target{
private Target target;
public Adapter(Target target) {
this.target = target;
}
@Override
public void foo() {
target.foo();
}
}
/*
클라이언트가 adaptee클래스를 자신이 원하는 인터페이스를 이용하여 사용할 수 있게끔 해줌. (단, 클라이언트와 adaptee에는 변형을 가해주지 않음.)
*/
'객체지향 디자인 패턴' 카테고리의 다른 글
반복자 패턴중 자바에서 범용 자료구조 구현시 겪게 되는 어려움 (0) | 2023.11.18 |
---|---|
소프트웨어 공학시간에 살펴본 몇몇 디자인 패턴의 간단한 정리 (0) | 2023.11.08 |
[UML] 클래스 다이어그램 (Class Diagram) (0) | 2023.11.04 |
생성패턴 (0) | 2023.10.15 |
3. 장식(Decorator)패턴 (0) | 2023.10.05 |