코드 저장소.

[디자인 패턴] 어뎁터 패턴 본문

ComputerScience/디자인 패턴

[디자인 패턴] 어뎁터 패턴

slown 2024. 5. 25. 20:30

목차

1.어뎁터 패턴?

2.어뎁터 패턴의 장단점

3.어뎁터 패턴 구현

 

1.어뎁터 패턴?

어댑터 패턴(Adapter Pattern)은 소프트웨어 디자인 패턴 중 하나로, 호환되지 않는 인터페이스를 가진 클래스들을 함께 동작하게 만들어주는 구조적 패턴입니다. 이 패턴은 기존 클래스를 수정하지 않고도 다른 인터페이스와 호환되도록 중간에 어댑터 클래스를 삽입하여 기존 코드의 재사용성을 높여줍니다.

 

2.어뎁터 패턴의 장단점

장점

 

호환성 : 서로 다른 인터페이스를 가진 두 객체를 통합할 수 있다. 기존 코드나 라이브러리를 수정하지 않고도 새로운 코드를 통합할 수 있습니다.
재사용성 : 기존의 클래스나 라이브러리를 활용하여 새로운 기능을 구현할 수 있게 해 준다. 기존 코드를 재사용하면서도 새로운 요구 사항을 충족시킬 수 있습니다.
유지보수성 : 변경된 요구 사항에 대응하기 위해 기존 코드를 수정할 필요가 없으므로 유지보수가 더 쉬워집니다.
느슨한 결합 : 어댑터가 두 객체 간의 상호작용을 조정하므로 두 객체 간의 결합도가 낮아집니다.

단점

성능 저하 : 중간에 어댑터를 추가하여 작업하기 때문에 약간의 성능 저하가 발생할 수 있다. 그러나 대부분의 상황에서 성능 저하는 미미하며, 코드의 가독성과 확장성을 개선하는 데 중점을 둬야 합니다.


복잡성 : 코드가 추가되기 때문에 코드의 복잡성이 증가할 수 있다. 따라서 단순한 상황에서는 어댑터 패턴을 사용하지 않는 것이 더 나을 수 있습니다.

3.어뎁터 패턴의 구현

어댑터 패턴의 경우에는 간단한 구현을 통해서 설명을 해드리겠습니다. 

시나리오는 Adaptee클래스에서 Adapter클래스로 전환을 하는 시나리오입니다. 

 

Target: 어플리케이션에 적용이 되는 인터페이스

Adaptee: Adapter로 전환되기 전의 대상이 되는 클래스 

Adapter: Adaptee를 Target인터페이스를 사용해서 전환하는 클래스

 

public interface Target {
    void request();
}

 

public class Adaptee {
    public void specificRequest() {
        System.out.println("Adaptee's specific request");
    }
}

 

public class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

 

public class Client {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new Adapter(adaptee);

        target.request(); // Output: Adaptee's specific request
    }
}

 

위의 코드를 설명하면 다음과 같습니다.

 

1. 클라이언트는 Target 인터페이스에 메서드를 작성합니다. 

2. 기존의 비호환인 Adaptee클래스에 있는 메서드와 Taget인터페이스는 다르므로 Adapter에 있는 클래스를 작성합니다.

3. Adpater 클래스에 Target인터페이스를 상속을 받아 메서드를 오버라이딩한 후 메서드를 재작성을 합니다. 

4.마지막으로 메인메서드에서 다형성을 활용해서 Target인터페이스에 있는 request()메서드를 실행을 하면 Adaptee클래스에서 작성한 메서드의 내용이 출력이 됩니다. 

 

이렇게 하면  Target 인터페이스를 통해 Adaptee의 기능을 사용할 수 있습니다.

'ComputerScience > 디자인 패턴' 카테고리의 다른 글

[디자인 패턴] 데코레이트 패턴  (0) 2024.06.05
[디자인 패턴] 브릿지 패턴  (0) 2024.06.03
[디자인 패턴] 프록시 패턴  (0) 2024.05.21
[디자인 패턴] 싱글톤 패턴  (0) 2024.05.16
디자인 패턴  (0) 2024.05.12