Java/Design Pattern

[Design Pattern] Adapter Pattern(어댑터 패턴)이란

SeungbeomKim 2023. 10. 31. 17:59

Adapter Pattern에 대해 알아보기 전, Design Pattern(디자인 패턴)에 대해 간단하게 설명드리겠습니다. 

디자인 패턴이란 소프트웨어의 재사용성, 호환성, 유지보수성을 보장하기 위한 설계 기법이며 아이디어입니다. 필수적인 요소는 아니지만, 아는 것과 모르는 것은 차이가 크다고 생각합니다 (필요에 따라 가져다 쓸 수 있어야 된다고 생각합니다)

 

Adapter Pattern

adpater-pattern-image

  • 호환되지 않는 인터페이스들을 연결하는 디자인 패턴
  • 기존의 클래스를 수정하지 않고도 특정 인터페이스를 필요로 하는 코드에서 사용 가능
  • 서로 다른 인터페이스를 가진 클래스들이 상호작용할 수 있기에 코드의 재사용성 증대

Component

  • Target(타겟): Client가 직접적으로 호출하는 interface
  • Adaptee(어댑티): 아직 Target과 호환되지 않은 기존 클래스(or interface)
  • Client(클라이언트): 특정 작업을 요청하는 클래스
  • Adapter(어댑터): Target interface의 구현체 

이제 코드를 예시로 들어서 설명드리겠습니다.

// 타켓 인터페이스
public interface Target {
	
    void doSomething();
}

//실제 사용하려는 클래스
public class Adaptee {
	
    public void performAction() {
    	System.out.println("Action performed!");
    }
}

public class Adapter implements Target {
	
    private final Adaptee adaptee;
    
    public Adapter(Adaptee adaptee) {
    	this.adaptee = adaptee;
    }
    
    @Override
    public void doSomething() {
    	adaptee.performAction();
    }
}

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

실제 사용하려면 Adaptee 클래스를 직접적으로 호출하지 않았음에도 불구하고 Target 인터페이스를 통해 performAction 메서드를 호출할 수 있게 되었습니다. 

 

장점

  • 기존의 사용하려는 클래스를 수정하지 않고도 클라이언트에서 새로운 인터페이스를 사용할 수 있습니다(코드 재사용성, 및 중복성 감소, 클래스간 결합도 감소)

단점

  • 어댑터 클래스를 추가로 작성해야 하기 때문에, 코드의 복잡성 증가 및 데이터 변환 과정에서의 오버헤드 발생

오늘은 간단하게 어댑터 패턴에 대해 알아보았습니다. 다음에는 싱글톤 패턴, 템플릿 메서드 패턴에 대해서도 알아보도록 하겠습니다. 

 

<참고 자료>

https://yozm.wishket.com/magazine/detail/2077/

 

자바 어댑터 패턴은 어떻게 쓰일까? | 요즘IT

이번 글을 시작으로 실제 자바 프로젝트에서 디자인 패턴을 어떻게 사용하는지 정리하고자 합니다. 첫 번째 주제로 자바 라이브러리와 프레임워크에서 자주 쓰이는 어댑터 패턴(Adapter Pattern)에

yozm.wishket.com