Adapter Pattern

2016. 4. 25. 10:28·Software Engineering/Design Pattern
반응형

Adapter Pattern




Adapter Pattern 이란?



- Adapter Pattern은 A라는 클래스의 메서드나 기능들을 B에서도 그대로 사용할 수 있게 중간매개체인 교환장치를 만들어 주어 사용하는 패턴이며 Wrapper 패턴이라고도 불린다. 


한국에서는 220볼트를 사용하지만 해외에서는 110볼트를 사용해야 한다. 그래서 220볼트를 110볼트로 사용하기 위해서는 중간매게체인 어댑터(Adapter)가 필요하다. 즉, 변환장치같은 역할을 하는 것이다.




 

Adapter Pattern의 종류



1. 클래스에 의한 Adapter Pattern

- 상속을 이용한 Adapter Pattern이다.


2. 인스턴스에 의한 Adapter Pattern

(위임을 사용한 Adapter Pattern)





1. 클래스에 의한 Adapter Pattern





- Banner 클래스는 이미 제공되어 있는 것으로 메소드 전 후에 *을 붙여 표시하는 showWithParen이 있다.


- Print 인터페이스는 Banner 클래스를 사용하여 Print 인터페이스를 충족시키는 클래스를 만드는역할로 어댑터를 만드는 역할을 한다.


- PrintBanner 클래스는 어댑터 역할을 하는 것으로 이미 제공되어 있는 Banner 클래스를 상속하여 필요로하는 Print 인터페이스를 구현한다.




Banner.java

public class Banner {

private String str;

public Banner(String str) {

this.str = str;

}

public void showWithParen() {

System.out.println("("+str + ")");

}

public void showWithAster() {

System.out.println("*"+str +"*");

}

}



PrintBanner.java

public class PrintBanner extends Banner implements Print {

public PrintBanner(String str) {

super(str);

}


@Override

public void printWeak() {

showWithParen();

}


@Override

public void printStong() {

showWithAster();

}


}



Print.java

public interface Print {

public abstract void printWeak();

public abstract void printStong();

}


Main.java

public class Main {

public static void main(String[] args) {

Print p = new PrintBanner("adapter");

p.printWeak();

p.printStong();

}

}




Class Adapter Pattern

Adaptee : 개조되는쪽의 역할

Adapter : 개조하려는 구현부


class Adapter extends Adaptee implements SomeInterface {

  

...

   

    public void methodA() {

        super.methodB();

    }

 

    ...

}





2. 위임을 사용한 Adapter Pattern







위임은 누군가에게 맡긴다는 의미로 Java에서 위임은 어떤 메서드의 실제 처리를 다른 인스턴스의 메서드에 맡기는 것을 말한다.


1번과의 차이점은 Print인터페이스를 추상 클래스로 바꾸고 PrintBanner에서 Print 추상클래스를 상속하고 Banner는 컴포지션을 한것이다.


컴포지션은 Has-a 포함관계이다. 즉 위임을 한것이다. PrintBanner에서 Banner를 인스턴스화 하여 사용하겠다고...


즉, Banner 클래스를 이용하여 Print클래스와 동일한 메서드를 갖는 클래스를 구현하는 것이다.(java에서는 두 개의 클래스를 동시에 상속 할 수 없기 때문에)



Print 인터페이스에서 추상클래스로 바꼇다.


Print.java

public abstract class Print {

public abstract void printWeak();

public abstract void printStong();

}



PrintBanner를 보면 Print 추상클래스를 상속받아 오버라이드를 하였고 Banner는 컴포지션하여 메서드를 사용하는 것을 볼 수 있다.


PrintBanner.java

public class PrintBanner extends Print {

  //has-a composition

private Banner banner;

public PrintBanner(String str) {

//banner new instance 

this.banner = new Banner(str);

}


@Override

public void printWeak() {

banner.showWithParen();

}


@Override

public void printStong() {

banner.showWithAster();

}


}


반응형
저작자표시 비영리 변경금지 (새창열림)

'Software Engineering > Design Pattern' 카테고리의 다른 글

Observer Pattern(관찰자 패턴)  (0) 2023.04.20
Template Method Pattern(템플릿 메서드 패턴)  (0) 2016.04.26
Iterator Pattern  (0) 2016.04.21
Singleton Pattern  (0) 2016.01.31
'Software Engineering/Design Pattern' 카테고리의 다른 글
  • Observer Pattern(관찰자 패턴)
  • Template Method Pattern(템플릿 메서드 패턴)
  • Iterator Pattern
  • Singleton Pattern
조슈아。
조슈아。
Remembering not to lose preciousness as being deceived by familiarity...
조슈아。
거꾸로 바라본 세상
조슈아。
전체
오늘
어제
  • 분류 전체보기 (155)
    • Language (56)
      • Javascript (9)
      • TypeScript (3)
      • Java (42)
      • Kotlin (2)
    • 일상 (1)
    • Front-End (4)
      • JSP (3)
      • JavaFX (1)
    • Back-End (17)
      • Kafka (10)
      • Netty (5)
      • Mybatis (1)
      • Nginx (1)
    • Spring (11)
    • Database (10)
      • Database (1)
      • SQL (5)
      • Oracle (1)
      • MariaDB (2)
      • MongoDB (1)
    • Algorithms (22)
      • structure (13)
      • Beakjoon-CodingTest (7)
      • Programmers (0)
    • CI-CD (11)
      • Docker (11)
    • Software Engineering (6)
      • Design Pattern (5)
    • OS-Tools (13)
      • Eclipse (1)
      • Linux (9)
      • Etc (1)
      • 참고사이트 (2)
    • Big-Data (2)
      • Storm (1)
      • Spark (1)
    • Security (2)
      • OAuth (2)

블로그 메뉴

  • 글쓰기
  • 블로그홈
  • 태그로그
  • 미디어로그
  • 방명록
  • 관리자

공지사항

인기 글

태그

  • 자료구조
  • Algorithm
  • 디자인패턴
  • Effective Java
  • javascript
  • 네티
  • java socket
  • Spring Reactor
  • algorithms
  • typescript
  • ES6
  • netty
  • Apache Kafka
  • 도커
  • Kotlin
  • 연결리스트
  • Spring
  • reactor
  • nginx
  • Kafka
  • 알고리즘
  • OAuth
  • Reactive Programming
  • Design Pattern
  • Reactive spring
  • structures
  • RXjava
  • reactive
  • docker
  • java

최근 댓글

반응형
hELLO· Designed By정상우.v4.5.2
조슈아。
Adapter Pattern
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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