호비시의 끄적끄적

Adapter pattern 본문

Back

Adapter pattern

호비시 2022. 7. 29. 00:11

어댑터 패턴 Adapter pattern

image Source: dotnet tricks.

어댑터 패턴이란 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로,

호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다.
코드의 재활용성을 증가시키고 기존 코드를 수정하지 않는다.
어댑터 패턴의 핵심은 호환성이다.

언제 사용할까

외부 구성 요소를 기존 시스템에 재사용하고 싶지만 호환되지 않는 경우
애플리케이션이 클라이언트가 기대하는 인터페이스와 호환되지 않는 경우
원본 코드를 수정하지 않고 애플리케이션에서 레거시 코드를 재사용하려는 경우

 

예제

 

 

설문 조사 대상자로부터 받은 설문 응답을 홈 페이지에 표시하는 온라인 포털 사이트를 상상해보자. 설문 조사 Response는 포털 사이트가 응답을 얻기 위해 협력하고 있는 타사 공급업체로부터 온 것이다. 타사 공급업체는 특정 설문 조사에 대한 응답 목록을 제공할 수 있는 시스템을 이미 갖추고 있다. 또한 포털사이트가 홈 페이지에 표시되는 설문 조사에 대한 실제 응답을 얻기 위해 타사 공급업체의 코드를 호출할 수 있는 온라인 포털(클라이언트)에 사용할 수 있는 인터페이스가 없다. 클라이언트(온라인 포털) 코드와 호환되지 않는 타사 벤더의 코드를 호출하고자 하므로 여기에 "어댑터 설계 패턴"을 적용할 수 있다.

void Main() {  
    var client = new Client(new Adaptar());  
    var userResponses = client.GetResponsesRecieved();  
    userResponses.ForEach(p => p.Dump());  
}  

// 응답 목록과 요청들을 얻기위해 호출하는 매서드를 캡슐화
public interface ITarget {  
    List <string> GetResponses();  
}  

// 응답 목록을 제공하는 타 공급업체
public class Adaptar: ITarget {  
    public List <string> GetResponses() {  
        return new ResponsesStore().GetResponsesRecieved();  
    }  
}  


// ITarget을 구현하는 공겁업체의 코드를 호출하는 Rapper
public class ResponsesStore {  
    public List <string> GetResponsesRecieved() {  
        var responses = new List <string> () {  
            "This is a test response by user 1",  
            "This is a test response by user 2",  
            "This is a test response by user 3",  
            "This is a test response by user 4"  
        };  
        return responses;  
    }  
}  

// 응답 목록을 가져와 표시하는 Client
public class Client {  
    private ITarget _target;  
    public Client(ITarget target) {  
        _target = target;  
    }  
    public List <string> GetResponsesRecieved() {  
        return _target.GetResponses();  
    }  
}

// OUTPUT
This is a test response by user 1
This is a test response by user 2
This is a test response by user 3
This is a test response by user 4

 

특징

기존 로직을 방해하지 않고 새 어댑터를 추가할 수 있다. 

코드를 보다 구조적으로 짤 수 있고, 개방 폐쇠 원칙을 지킬 수 있다.

인터페이스를 포함해야 하므로 복잡성이 증가한다.

 

참고자료

https://niceman.tistory.com/141

https://dev-youngjun.tistory.com/210

https://www.c-sharpcorner.com/article/adapter-design-pattern-explained-simply/

'Back' 카테고리의 다른 글

로그인 관리 Session? JWT  (0) 2022.06.29
Docker ?  (0) 2022.06.25
객체지향 프로그램이란  (0) 2022.06.20
git bash ec2 연결  (3) 2022.04.18
JWT  (0) 2022.04.15
Comments