[객체지향설계 & 패턴] 어댑터 패턴

2025. 4. 6. 15:30·CS/객체지향설계 & 패턴
목차
  1. 어댑터(Adapter) 패턴 
  2. 상속을 이용한 방식
  3. 위임을 이용한 방식(인스턴스 이용)
  4. 구성요소
  5. 마무리

 오랜만에 돌아온 디자인 패턴 포스팅... 오늘은 인터페이스와 관련있는 패턴인 어댑터(Adapter) 패턴에 대해서 알아보겠다. 참고로 패턴과 관련된 사항은 영진닷컴의 'Java 언어로 배우는 디자인 패턴 입문', 책을 이용하였다. 

어댑터(Adapter) 패턴 

 우리가 많이 들어봤을 어댑터란, 다른 기계 장치를 서로 연결하여 사용할 수 있도록 해주는 장치이다. 어댑터 패턴도 이것과 같다. 기존 존재하는 코드를 그대로 사용할 수 없을 때, 어댑터 패턴을 이용하여 기존 코드를 필요한 형태로 변환하여 이용하는 것이 어댑터 패턴이다. 어댑터 패턴의 적용은 1) 상속을 이용한 방식, 2) 위임을 이용한 방식으로 가능하다.

  Banner 클래스에 showWithParen(괄호로 묶어 문자열을 표시), showWithAster(문자열 앞뒤에 *를 표시) 메서드가 있다고 가정하자. 이 Banner 클래스는 앞서 말한 기존 존재하는 코드를 그대로 사용할 수 없는 클래스이다.

 이제 printWeak(괄호로 묶어 문자열을 표시), printStrong(문자열 앞뒤에 *를 표시) 메소드를 가진 Print 인터페이스를 만들었다. 우리가 해야 하는 것은 Banner 클래스를 이용해 Print 인터페이스를 충족하는 클래스 PrintBanner를 만드는 것이다.

 

상속을 이용한 방식

 상속을 이용해 PrintBanner를 만드려면 어떻게 해야 할까? PrintBanner가 Banner 클래스를 상속받아서 Print 인터페이스의 printWeak, printStrong 메소드를 완성하도록 하면 될것이다. 이것을 그림으로 그린다면 아래와 같다.

 PrintBanner의 메소드는 다음과 같이 구성된다.

public void printWeak() { showWithParen(); }, public void printStrong() { showWithAster(); }

이렇게 클래스를 구성하면 기존의 사용할 수 없던 Banner의 기능을 PrintBanner 어댑터를 이용해 Banner 내부의 기능을 이용할 수 있다!! 다음으로, 위임을 이용한 방법을 알아보자.

 

위임을 이용한 방식(인스턴스 이용)

 해결하려는 문제는 위와 같다. 위임을 이용한 방식에서는 기존 사용하려는 클래스를 인스턴스화 하여 어댑터 역할을 할 클래스에 넣어주면 된다.

 위임을 이용한 방식의 포인트는 기존에 사용하지 못하는 클래스를 인스턴스화 하여 어댑터 역할의 클래스에 넣어주는 것이다. 위와 같이 클래스를 설계하면 PrintBanner 클래스를 이용해 Banner의 기능을 이용할 수 있다!! 

구성요소

Target

 타겟은 지금 필요한 메소드를 결정한다. 위 예시에서는 Print 인터페이스의 printWeak, printStrong 메소드를 사용하려 하고 있으므로, 상속을 이용한 방식에서 타겟은 Print 인터페이스이고 위임을 이용한 방식에서 타겟은 Print 클래스이다.

Client

 클라이언트는 타겟의 메소드를 사용해 작동하는 요소이다. 위 예시에서 전체 코드를 작성하지는 않아 Client를 알 수는 없지만 Main 내에서 위 어댑터 패턴을 적용해 사용한다면 Main 클래스가 클라이언트가 된다.  

Adaptee

 Adaptee는 적응 대상자로, 이미 준비된 메소드를 가지는 역할이다. 위 예시에서 Banner 클래스의 메소드를 어댑터 패턴을 이용해 사용할 수 있도록 하고 있다. 따라서 Adaptee는 Banner 클래스이다. 

Adapter

 Adapter는 Adaptee의 메소드를 사용하여 Target을 만족시키는 목적을 가지고 있다. 위 예시에서 Banner의 기능을 사용할 수 있도록 해주는 PrintBanner 클래스가 적응자, Adapter이다. 

 

마무리

 어댑터 패턴은 상속 또는 위임 방식을 이용해 적용할 수 있다고 하였는데 어떤 방식을 이용하는게 더 좋을까? 상속 방식을 이용한다면 상위 클래스의 내부 기능, 동작 등을 자세하게 알아여 상속을 효과적으로 사용할 수 있어 어려움이 존재할 수 있으므로 위임 방식을 이용하는 것이 더 좋을 것이다.

 

'CS > 객체지향설계 & 패턴' 카테고리의 다른 글

[객체지향설계 & 패턴] 프로토타입 패턴  (0) 2025.05.10
[객체지향설계 & 패턴] 브리지 패턴  (0) 2025.04.06
[객체지향설계 & 패턴] 퍼사드 패턴  (1) 2025.04.06
[객체지향설계 & 패턴] 디자인 패턴 개론  (0) 2025.03.22
[객체지향설계 & 패턴] Solid 설계 원리  (0) 2025.03.18
  1. 어댑터(Adapter) 패턴 
  2. 상속을 이용한 방식
  3. 위임을 이용한 방식(인스턴스 이용)
  4. 구성요소
  5. 마무리
'CS/객체지향설계 & 패턴' 카테고리의 다른 글
  • [객체지향설계 & 패턴] 브리지 패턴
  • [객체지향설계 & 패턴] 퍼사드 패턴
  • [객체지향설계 & 패턴] 디자인 패턴 개론
  • [객체지향설계 & 패턴] Solid 설계 원리
hyeon0117
hyeon0117
컴공으로 살아남기
  • hyeon0117
    컴공 생활기
    hyeon0117
  • 전체
    오늘
    어제
    • 분류 전체보기 (52) N
      • Algorithm (2)
      • PS (16) N
        • Solve (16) N
      • CS (34) N
        • 객체지향설계 & 패턴 (12)
        • COLMAP (2)
        • 머신러닝 (1)
        • 프로그래밍 언어론 (18) N
        • 형식언어 (0)
        • 운영체제 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    soild 패턴
    java
    언어 타입
    어휘 분석기
    의미론
    백준 6825
    백준1895
    BOJ
    플로이드 - 워셜
    자료형
    백준1531
    프로그래밍 언어론
    블록 구조 언어
    백준13417
    백준
    백준 25418
    다이나믹 프로그래밍
    함수
    PLT
    최단 경로
    백준23882
    디자인 패턴
    백준 11899
    자료구조
    객체지향
    알고리즘
    선택 정렬
    객체지향설계
    디자인패턴
    PS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyeon0117
[객체지향설계 & 패턴] 어댑터 패턴

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.