Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- java
- 자바
- Thymeleaf
- 스프링 핵심 기능
- 스프링 핵심 원리
- 백준
- 인프런
- Spring Boot
- Android
- JDBC
- spring
- 알고리즘
- Greedy
- AOP
- pointcut
- Proxy
- springdatajpa
- kotlin
- Servlet
- QueryDSL
- db
- SpringBoot
- 김영한
- 그리디
- jpa
- JPQL
- 스프링
- Exception
- transaction
- http
Archives
- Today
- Total
개발자되기 프로젝트
Adapter Pattern 본문
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
'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