728x90
어댑터 패턴 (adapter pattern)
- 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.
- 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
- 어댑터 패턴은 서로 다른 인터페이스를 가진 두 클래스를
어댑터 클래스로 인터페이스를 통일 시켜 사용하는 방법이다.
장점
- 기존 클라이언트 단의 코드 수정 최소화.
- 클라이언트는 연동부분을 몰라도, 새로운 코드의 기능을 일관되게 사용가능.
단점
- 어댑터 클래스에서 통일 시켜주는 부분을 하나씩 구현해야 함.
활용 상황
- 기존의 코드에 새로운 코드(써드파티 라이브러리 등)을 연동하여 사용하고 싶은데, 두 코드의 인터페이스가 달라, 이를 하나로 통일하여 사용하고 싶을 때.
- 아래 예의 경우, 기존의 클라이언트 단 코드에 맞춰 통일함.
Ts 기반입니다
interface Duck {
quack();
fly()
}
class mallerDuck implements Duck {
public quack(){
return console.log("꽥 꽦")
}
public fly(){
return console.log("나는 오리")
}
}
interface Turky {
gobble()
fly2()
}
class wildTucky implements Turky {
public gobble(){
return console.log("칠 맨조!")
}
public fly2(){
return console.log("나는 칠맨죠")
}
}
Adapter:
- client 와 adapter 중간에서 호환성이 없는 둘을 연결시켜주는 역할을 담당
- Target Interface를 implements 하며, 클라이언트는 target interface를 통해 어댑터에 요청을 보냅니다.
- 어댑터는 clinet 의 요청을 adapter 가 이해 할수있는 방법으로 전달하고, 처리는 adapter에서 이루어진다
class TurkyAdapter implements Duck{
constructor(private turky:Turky){}
public TurkyAdapter(turky:Turky): void{
console.log("#")
this.turky = turky
}
public quack(){
console.log("@")
turky.gobble()
}
public fly(){
turky.fly2()
}
}
const turky = new wildTucky()
turky.gobble();
turky.fly2();
const test = new TurkyAdapter(turky)
test.quack();
test.fly()
실행 경과
- 같은 output이 나온다.
'OOD > Structural Design Patterns(구조패턴)' 카테고리의 다른 글
Structual Pattern (구조패턴) 개념 모음 (0) | 2021.11.23 |
---|