본문 바로가기
프로그래밍/JAVA

Adapter 패턴

by 낭만가을 2020. 2. 1.

1. Adapter 패턴이란

이미 구현되어 있는 코드가 있는데, 둘이 연결 좀 시켜주고 싶을 때가 있죠. 어떤 좋은 메서드가 있는데, 인자로 A라는 형식을 받습니다. 근데, 이미 구현되어 있는 코드에는 B라는 형식으로 구현되어 있습니다. 이럴 때, B를 A의 형식으로 바꿔주면 좋은 메서드를 써먹을 수 있습니다. Adapter 패턴은 어떤 오브젝트를 캐스팅이 불가능한 다른 클래스의 형태로 변환시켜주는 것입니다.

2. 따라하기

// Adapter Class
package com.designpattern.adapter;

import java.util.Enumeration;
import java.util.Iterator;

public class IteratorToEnumeration implements Enumeration {
    private Iterator iter;

    public IteratorToEnumeration(Iterator iter){
        this.iter = iter;
    }

    @Override
    public boolean hasMoreElements() {
        return  iter.hasNext();
    }

    @Override
    public String nextElement() {
        return  iter.next();
    }
}

//test 클래스
package com.designpattern.adapter;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

public class Test {
    public static void  nextObject(Enumeration enumer){
        while (enumer.hasMoreElements()){
            System.out.println(enumer.nextElement());
        }
    }

    public static void main(String[] args){
        List list = new ArrayList();
        list.add("first");
        list.add("second");
        list.add("third");
        Enumeration ite = new IteratorToEnumeration(list.iterator());
        nextObject(ite);
    }
}
//결과 
first
second
third


우리가 최종적으로 쓰고자하는 것은 nextObject() 입니다. 그 녀석은 인자로 Enumeration을 받고 있지요. 
그러나 우리가 가지고 있는 것은 Iterator입니다. IteratorToEnumeration 클래스는 Iterator를 받아서 Enumeration 으로 변경시켜줍니다. 
A to B의 형태를 가지는 Adapter는 A를 멤버변수로 가지고 B를 구현합니다.
즉, IteratorToEnumeration 클래스가 이 역활을 하고 있습니다. IteratorToEnumeration 이클래스가 아답터 클래스 입니다.

3. JAVA API에 있는 Adapter 패턴 을 이용한 클래스들

java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream) (returns a Reader)
java.io.OutputStreamWriter(OutputStream) (returns a Writer)
javax.xml.bind.annotation.adapters.XmlAdapter#marshal() and #unmarshal()
이클립스나 인텔리 제이에서 저 소스들을 파헤쳐 가면서 어떻게 adapter 패턴들을 사용했는지 한번 살펴보시기 바랍니다.
시간이 될때 저도 저 클래스들이 apater 패턴을 사용하는가를 작성하겠습니다.



'프로그래밍 > JAVA' 카테고리의 다른 글

Template 패턴  (0) 2020.02.01
Builder 패턴  (0) 2020.02.01
Iterator 패턴  (0) 2020.02.01
Factory 패턴  (0) 2020.02.01
디자인패턴 종류별 간단 암기 노트  (0) 2020.01.30

댓글