Adapter Pattern 시스템 조정 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

어댑터 패턴이란

Adapter Pattern 호환되지 않는 두 개의 인터페이스 관계 조정

  • 조정 대상을 수정하지 않고 한 인터페이스를 다른 인터페이스와 연결
  • 취약점 때문에 리팩토링할 수 없는 레거시 코드 활용 or 업그레이드 시 이슈 회피
    • 서드파티third party 라이브러리 기능 추가
  • 주요 접근 방식
    • 객체 어댑터object adapter 객체 구성을 사용하고 어댑터는 조정한 객체의 래퍼wrapper처럼 동작
      • 필요한 메서드가 없는 클래스의 경우 도움은 되지만 직접 수정 불가
      • 원래 클래스의 메서드를 선택하고 필요한 기능으로 조정
        image
    • 클래스 어댑터class adapter 기존 클래스의 인터페이스를 다른 클래스의 인터페이스에 적용하기 위해 상속 사용
      • 다른 클래스와 같이 동작해야 하지만 직접 수정할 수 없는 클래스 조정
        image
    • 어댑터 클래스adapter class 클라이언트어댑트된 엔티티(어댑티adaptee) 사이에 위치
      • 클래스 어댑터class adapter 상속을 통해 어댑티와의 관계 설정
      • 객체 어댑터Object adapter 적용을 위해 어댑티의 인스턴스를 래핑하기 위해 컴포지션composition 사용
      • 적용하는 엔티티 수정X

상속Inheritance 부모(슈퍼) 클래스의 모든 속성/생성자/메서드를 물려받은 자식(서브) 클래스에서 기능 확장 코드 재사용성 is a 관계
컴포지션Composition 추상적(복합적)인 큰 객체: 운용 객체가 구체적(단순)인 작은 객체: 구성요소인스턴스(속성)로 포함하여 인스턴스를 통해 기능 제공 구성요소의 독립성 중복 코드 감소 유연한 객체 설계 단일 책임 원칙 has a 관계

  • 헷갈리기 쉬운 패턴 퍼사드 패턴facade pattern
    • 퍼사드 패턴 단순화된 전면 인터페이스를 유지하면서 호환되지 않는 시스템 조정
    • 어댑터 패턴 클라이언트에 일관적인 인터페이스를 유지하면서 호환되지 않는 시스템 조정
    • 퍼사드 패턴, 어댑터 패턴 비슷한 구조적 패턴이지만 완전히 다른 목적으로 사용

1. 장·단점

  • 장점
    • 수정 없이 조정 가능 오래된 코드 or 서드파티 코드를 수정없이 조정하는 표준 접근방식 제공
    • 재사용성 및 유연성
      • 새로운 시스템에서 최소한의 변경으로 레거시 코드 지속 사용
      • 개발 비용 절감
  • 단점
    • 지속적인 레거시 사용
      • 비용 효율적이지만 장기적인 문제 야기
      • 새로운 유니티 버전 or 서드파티 라이브러리에서 호환되지 않아 업그레이드 옵션 제한 가능
    • 약간의 성능 저하 객체 간 호출 리다이렉션으로 약산의 성능저하 발생 가능
      • 다만 이슈가 되기엔 아주 약간의 성능저하

2. 사용시기

  • 유니티 Asset store의 서드파티 라이브러리에 새로운 기능 추가를 위해 핵심 클래스 및 인터페이스 일부 수정할 때
    • 서드파티 코드 직접 수정 시 라이브러리 업데이트할 때마다 병합 오류 발생
    • 서드파티 개발자가 원하는 기능을 추가할 때까지 기다려야 하는 제한사항 극복
  • 기존의 클래스 사이에 어댑터를 배치하여 원하는 기능 추가 가능

어댑터 패턴 구현 예제 UML

image