상세 컨텐츠

본문 제목

구조패턴 중, 어댑터(Adapter)패턴에 대하여...

소프트웨어공학

by amanda.hyon 2024. 7. 14. 18:26

본문

구조 패턴은 프로그램 내 자료 구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 사용되는 패턴으로,,

클래스나 객체를 조합하여 더 큰 구조를 만들수 있게 해줍니다.

 

구조패턴중, 어댑터(Adaptor) 패턴은 구조 디자인 패턴 중 하나로, 기존 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환합니다. 이 패턴은 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 돕기 위해 사용됩니다.

 

어댑터 패턴을 통해 기존 클래스를 수정하지 않고도 다른 인터페이스와 호환되도록 만들 수 있습니다. 이 패턴은 특히 레거시 코드와 새로운 코드 간의 통합이나 서로 다른 서드파티 라이브러리와의 통합을 쉽게 할 수 있게 합니다.

 

자바에서는..

 

인터페이스를 사용하여 어댑터 패턴을 명확하게 구현합니다. 어댑터 클래스는 새 인터페이스를 구현하고, 내부적으로 기존 클래스의 인스턴스를 사용하여 메서드를 호출합니다.

 

어댑터 패턴을 인터페이스와 클래스를 사용하여 구현할 수 있습니다. 아래는 간단한 어댑터 패턴 예제입니다.

// 기존 인터페이스
interface OldInterface {
    void oldMethod();
}

// 기존 구현 클래스
class OldClass implements OldInterface {
    public void oldMethod() {
        System.out.println("Old method implementation");
    }
}

// 새로운 인터페이스
interface NewInterface {
    void newMethod();
}

// 어댑터 클래스
class AdapterClass implements NewInterface {
    private OldClass oldClass;

    public AdapterClass(OldClass oldClass) {
        this.oldClass = oldClass;
    }

    public void newMethod() {
        // 기존 클래스의 메서드를 호출
        oldClass.oldMethod();
    }
}

// 사용 예시
public class Main {
    public static void main(String[] args) {
        OldClass oldClass = new OldClass();
        NewInterface adapter = new AdapterClass(oldClass);
        adapter.newMethod();  // Old method implementation
    }
}

 

 

  • OldClass의 인스턴스 oldClass가 생성됩니다.
  • AdapterClass의 인스턴스 adapter가 생성되며, 이때 oldClass가 인자로 전달됩니다.
  • adapter.newMethod()가 호출되면, 어댑터 클래스 AdapterClass의 newMethod()가 실행됩니다.
  • newMethod()는 내부적으로 oldClass.oldMethod()를 호출합니다.
  • 결과적으로, oldClass.oldMethod()의 구현 내용인 "Old method implementation"이 출력됩니다.

 

파이썬 코드에서는..

파이썬에서는 동적으로 타입을 처리할 수 있기 때문에 더 간단하게 어댑터 패턴을 구현할 수 있습니다. 어댑터 클래스는 기존 클래스의 인스턴스를 받아서 필요한 메서드를 호출합니다.

# 기존 클래스
class OldClass:
    def old_method(self):
        return "Old method implementation"

# 어댑터 클래스
class Adapter:
    def __init__(self, old_class):
        self.old_class = old_class

    def new_method(self):
        # 기존 클래스의 메서드를 호출
        return self.old_class.old_method()

# 사용 예시
old_instance = OldClass()
adapter = Adapter(old_instance)
print(adapter.new_method())  # Old method implementation

 

 

  • OldClass의 인스턴스 old_instance가 생성됩니다.
  • Adapter의 인스턴스 adapter가 생성되며, 이때 old_instance가 인자로 전달됩니다.
  • adapter.new_method()가 호출되면, 어댑터 클래스 Adapter의 new_method()가 실행됩니다.
  • new_method()는 내부적으로 old_instance.old_method()를 호출합니다.
  • 결과적으로, old_instance.old_method()의 구현 내용인 "Old method implementation" 문자열이 반환됩니다.

 

관련글 더보기

댓글 영역