본문 바로가기

디자인 패턴

2. Adapter Pattern

설명하기전에 항상 생각해야 하는 주제가 있다고 생각한다. 우리는 왜 Adapter Pattern을 사용할까 ?

 

프로그래밍을 하며 시스템을 만들때는, 여러 다양한 라이브러리를 사용하거나 혹시 커스텀한 클래스나 인터페이스를 사용하고 싶은 경우가 있다. 

 

상황을 한번 가정해보자.

나는 A라는 클래스를 만들고 있다. 근데 B라는 클래스가 가지고 있는 메소드들을 활용하거나 Overriding해서 클래스를 만들고 싶은 상황이다. 이럴 경우 할수 있는 방법은 

1. 같은 상위 클래스를 가지는 경우, 다형성을 활용한다.

2. 그렇지 않을 경우 해당 객체를 상속한다.

 

하지만, 상속의 경우는 강한 결합을 낳게 된다. 강한 결합을 낳기에 is A관계가 아니면 신중해야 하며, 강한 결합을 하길 원치 않는다. 라는 판단이 설때, 할수 있는 디자인 패턴이 바로 Adapter Pattern이다.

 

다음과 같은 2가지의 인터페이스가 존재한다.

지금 나는 Iterator를 상속한 class를 가지고 있고, 이 class에서 hasNext 메소드를 호출할때 Enumeration의 hasMoreElements 메소드를 호출하기를 원한다. 어떻게 하는것이 좋을까?

 

가장 첫번째 방법은 내부에 Enumberation 클래스 변수를 가지는 것이다.

class MyIterator implements Iterator {
    Enumeration enumeration;       

}

두번째 방법은 실제 적용한 Method들을 Overriding 하는것이다.

그리고 실제 적용할 메소드를 안에 넣어주는 것이다.

class MyIterator implements Iterator {
    Enumeration enumeration;

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

    @Override
    public Object next() {
        return enumeration.nextElement();
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException(); //예외 던짐 UnsupportedOperationException 지원             
    }
}

이럴 경우 기존에 사용하던 객체의 형태를 변형시키지 않아도, 메소드를 추가하거나 변경이 가능하여 마찬가지로 확장성과 유연성을 제공한다.

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

Worker Thread Pattern  (0) 2022.08.24
데코레이터(Decorator) 패턴  (0) 2022.07.31
4. 전략 패턴  (0) 2022.07.14
3. 이터레이터 패턴  (0) 2022.07.12
1. Factory Pattern  (0) 2022.07.05