Notice
Recent Posts
Recent Comments
Link
관리 메뉴

개발자되기 프로젝트

Adapter Pattern 본문

Java/디자인 패턴

Adapter Pattern

Seung__ 2021. 11. 9. 23:35

1.Adapter Pattern


서로 다른 인터페이스를 중간에서 연결해주는 기능

이미 사용중이거나 정의된 인터페이스들을 중간에서 맞춰서 적용해 줄 수 있음

예) 안드로이드 ListView Adapter

 

2. 의도 (Intent)와 동기(Motivation)


  • 클라이언트에서 사용하던 방식대로 호출하여 사용할 수 있도록 조정해주는 기능
  • 서로 일치하지 않는 인터페이스를 변경하지 않고 중간에서 호출하여 사용할 수 있도록 제공
  • Wrapper

 

 

3. 해결 방법 (Solution)


  • 상속을 활용하여 구현하는 Adapter
  • 객체 합성의 방법으로 구현하는 Adapte

 

 

4. Class diagram


  • 상속 방법 

  • 합성 방법 : 상속보다 유연한 방법, 코드 재사용 목적이면 합성을 ㅊㅊ
    • 상속은 일반적인 클래스를 구체화 하는 방법.

 

5. 객체 협력 (collaborations)


  • Target : 클라이언트가 사용할 인터페이스를 정의 하고 있는 클래스
  • Client : Target 인터페이스를 사용하는 객체
  • Adaptee : 실제의 새롭거나 적용될 기능이 제공되는 클래스, adaptee가 변경될 가능성이 있음.
  • Adapter : Target 인터페이스에 Adaptee의 인터페이스를 맞춰주는 클래스

 

 

6. 중요한 결론 (consequence)


  • Adpter를 사용함으로써 클라이언트가 사용하는 방식은 동일하면서 여러 기능이 제공될 수 있다.
  • 예를 들어 안드로이드에서는 여러 View (ListView 나 GridView)를 구현할 때 이에 대한 Item들을 직접 View에 올리지 않고, Adapter를 이용하여 Adapter에서 Item을 관리하고 그리는 방식을 정하도록 한다.
    이 방법은 실제 보여주는 부분과 데이타를 분리하여 데이타가 다양한 방식의 View에 활용될 수 있고, 이 때 중간에서 사용되는 여러 Adapter (BaseAdapter, ListAdapter)등이 데이터와 View를 연결해준다.

 

7. 예제


public interface Print {

    public void printWeek();
    public void printStrong();
}
public class Banner {

    private String string;

    public Banner(String string) {
        this.string = string;
    }

    public void showWithParen(){
        System.out.println("(" + string + ")");
    }

    public void showWithAster(){
        System.out.println("**" + string + "**");
    }
}
  • Banner를 상속받은 클래스도 사용이 가능.
public class PrintBanner implements Print{

    private Banner banner;

    public PrintBanner(String string) {
        this.banner = new Banner(string);
    }

    @Override
    public void printWeek() {
        banner.showWithParen();
    }

    @Override
    public void printStrong() {
        banner.showWithAster();
    }
}
public class adapterTest {

    public static void main(String[] args) {

        Print print = new PrintBanner("hello");
        print.printWeek();
        print.printStrong();
    }
}

 

 

8. GitHub : 211109 Adapter Pattern


 

GitHub - bsh6463/designPattern

Contribute to bsh6463/designPattern development by creating an account on GitHub.

github.com

 

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

Observer Pattern  (0) 2021.11.11
조건에 따른 상태를 클래스로 표현하여 관리 - State  (0) 2021.11.10
Composite Pattern  (0) 2021.11.09
Decorator  (0) 2021.11.09
기능의 선언과 구현을 분리 - Bridge  (1) 2021.11.08
Comments