프런트엔드/디자인 패턴

[1일차] 어뎁터 | 구조 패턴 7일만에 끝내기 챌린지 - GoF 디자인 패턴

조드래곤나인 2023. 7. 16. 14:47

 

출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.

 

 

[1일차] 어뎁터(Adapter)
구조 패턴 7일만에 끝내기 챌린지 - GoF 디자인 패턴

타입스크립트로 설명하는 GoF 디자인 패턴의 구조 패턴 7일만에 끝내기 챌린지

 

 

어뎁터란?

클래스의 인터페이스를
사용자가 기대하는 인터페이스 형태로 적응시킵니다.
서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킵니다.

 

 

활용성

1) 기존 클래스를 사용하고 싶은 데 인터페이스가 맞지 않을 때
2) 이미 만든 것을 재사용하고 싶지만 이 재사용 가능한 라이브러리를 수정할 수 없을 때

 

 

구조 및 구현

 

클래스 적응자

다중 상속을 활용해서 한 인터페이스를 다른 인터페이스로 적응시킵니다.

interface Target {
    request(): void
}

class Adaptee {
    specificRequest() {}
}

class Adapter extends Adaptee implements Target {
    request() {
        this.specificRequest()
    }
}
 
class Main {
    target: Target
    constructor () {
        this.target = new Adapter()
        this.target.request()
    }
}
 

 

객체 적응자

객체 합성을 써서 이루어져 있습니다.

interface Target {
    request(): void
}

class Adaptee {
    specificRequest() {
        console.log('Adaptee')
    }
}

class Adapter implements Target {
    private adaptee: Adaptee
    constructor (adaptee: Adaptee) {
        this.adaptee = adaptee
    }
    request() {
        this.adaptee.specificRequest()
    }
}
 
class Main {
    target: Target
    constructor () {
        const adaptee = new Adaptee()
        this.target = new Adapter(adaptee)
        this.target.request() // Adaptee
    }
}
 

 


 

 

공식 기술블로그 링크

 

더넥스트웹리서치랩

웹 클라이언트 기술을 전문적으로 연구하고 자료를 발행하는 기술 블로그를 운영합니다.

the-next-web-research-lab.github.io

 

728x90