디자인 패턴 - Adapter

이강민·2024년 9월 18일
0

커널360

목록 보기
52/56
post-thumbnail

Adapter

  • 이미 제공된 코드를 그대로 사용할 수 없을 때, 필요한 형태로 변환한 후 이용하는 경우가 자주 있는데, 이미 제공된 것과 필요한 것 사이의 차이를 메우는 디자인 패턴이 Adapter 패턴이다.
    다른 표현으로 Adapter 패턴은 Wrapper 패턴이라고 불리기도 한다.

역할

  • 기존 클래스 Adaptee
    • Banner 클래스
  • 원하는 출력 Targer
    • Print 인터페이스 또는 클래스
  • Adapter
    • PrintBanner 클래스

기존 클래스 Banner 를 클라이언트가 원하는 메서드로 출력하고 싶을 때 상속 버전과 위임버전으로 각각 살펴본다.

클래스에 의한 Adapter 패턴 - 상속을 사용

  • Print 인터페이스를 PrintBanner가 구현체로 구현하고 있다.
  • PrintBanner는 Banner를 상속받아 사용된다.
  • 여기서 PrintBanner는 Adapter의 역할을 수행한다.
    • main 메소드는 PrintBanner를 통해 문자열을 호출하고 있으며 Banner를 통해 상속받은 메서드를 Print 인터페이스를 통해 구현하고 있다.

인스턴스에 의한 Adapter 패턴 - 위임을 사용

  • PrintBanner 가 Adapter 역할을 수행하면서 Banner클래스를 컴포지션으로 받아서 메서드를 사용하는데 Print 클래스를 상속받아 메서드를 오버라이드 하면서 Banner 클래스 메서드를 사용하고 있다.

상속 vs 위임

  • 일반적으로 상속을 사용하는 것보다 위임을 사용하는 편이 문제가 적은데 그 이유는 상위 클래스의 내부 동작을 자세히 모르면 상속을 효과적으로 사용하기 어려운 경우가 많기 때문이다.
  • 클래스의 결합도를 낮추고 응집도를 높이는 방법 중 하나가 상속이 아닌 위임을 통해 구현될 수 있다. 상속 시 부모 클래스에 의존성이 높아지고 부모 클래스에 따라 자식 클래스를 모두 변경사항을 적용해야 되기에 결합도가 높아지는 클래스가 될 수 있다.

언제 사용할까?

  • Adapter패턴은 기존 클래스에 한겹 덧씌워 필요한 클래스를 만든다. 이 패턴을 사용하면 필요한 메소드를 빠르게 만들 수 있다. 만약 버그가 발생하더라도 기존 클래스에는 버그가 없는 것을 알고 있으므로, Adapter 역의 클래스를 중점적으로 살펴보면 되고 프로그램 검사가 편해진다. 따라서 기존 코드에 새로운 코드를 작성할 때 사용한다.
profile
AllTimeDevelop

0개의 댓글

관련 채용 정보