Adapter Pattern 시스템 조정 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki
어댑터 패턴이란
Adapter Pattern 호환되지 않는 두 개의 인터페이스 관계 조정
- 조정 대상을 수정하지 않고 한 인터페이스를 다른 인터페이스와 연결
- 취약점 때문에 리팩토링할 수 없는 레거시 코드 활용 or 업그레이드 시 이슈 회피
- 서드파티third party 라이브러리 기능 추가
- 주요 접근 방식
- 객체 어댑터object adapter 객체 구성을 사용하고 어댑터는 조정한 객체의 래퍼wrapper처럼 동작
- 필요한 메서드가 없는 클래스의 경우 도움은 되지만 직접 수정 불가
- 원래 클래스의 메서드를 선택하고 필요한 기능으로 조정
- 클래스 어댑터class adapter 기존 클래스의 인터페이스를 다른 클래스의 인터페이스에 적용하기 위해 상속 사용
- 다른 클래스와 같이 동작해야 하지만 직접 수정할 수 없는 클래스 조정
- 다른 클래스와 같이 동작해야 하지만 직접 수정할 수 없는 클래스 조정
- 어댑터 클래스adapter class
클라이언트와어댑트된 엔티티(어댑티adaptee)사이에 위치- 클래스 어댑터class adapter 상속을 통해 어댑티와의 관계 설정
- 객체 어댑터Object adapter 적용을 위해 어댑티의 인스턴스를 래핑하기 위해 컴포지션composition 사용
- 적용하는 엔티티 수정X
- 객체 어댑터object adapter 객체 구성을 사용하고 어댑터는 조정한 객체의 래퍼wrapper처럼 동작
상속Inheritance
부모(슈퍼) 클래스의 모든 속성/생성자/메서드를 물려받은자식(서브) 클래스에서 기능 확장코드 재사용성is a 관계
컴포지션Composition 추상적(복합적)인 큰 객체:운용 객체가 구체적(단순)인 작은 객체:구성요소를인스턴스(속성)로 포함하여 인스턴스를 통해 기능 제공구성요소의 독립성중복 코드 감소유연한 객체 설계단일 책임 원칙has a 관계
- 헷갈리기 쉬운 패턴
퍼사드 패턴facade pattern- 퍼사드 패턴 단순화된 전면 인터페이스를 유지하면서 호환되지 않는 시스템 조정
- 어댑터 패턴 클라이언트에 일관적인 인터페이스를 유지하면서 호환되지 않는 시스템 조정
퍼사드 패턴,어댑터 패턴비슷한 구조적 패턴이지만 완전히 다른 목적으로 사용
1. 장·단점
- 장점
- 수정 없이 조정 가능 오래된 코드 or 서드파티 코드를 수정없이 조정하는 표준 접근방식 제공
- 재사용성 및 유연성
- 새로운 시스템에서 최소한의 변경으로 레거시 코드 지속 사용
- 개발 비용 절감
- 단점
- 지속적인 레거시 사용
- 비용 효율적이지만 장기적인 문제 야기
- 새로운 유니티 버전 or 서드파티 라이브러리에서 호환되지 않아 업그레이드 옵션 제한 가능
- 약간의 성능 저하 객체 간 호출 리다이렉션으로 약산의 성능저하 발생 가능
- 다만 이슈가 되기엔 아주 약간의 성능저하
- 지속적인 레거시 사용
2. 사용시기
- 유니티 Asset store의 서드파티 라이브러리에 새로운 기능 추가를 위해 핵심 클래스 및 인터페이스 일부 수정할 때
- 서드파티 코드 직접 수정 시 라이브러리 업데이트할 때마다 병합 오류 발생
- 서드파티 개발자가 원하는 기능을 추가할 때까지 기다려야 하는 제한사항 극복
- 기존의 클래스 사이에 어댑터를 배치하여 원하는 기능 추가 가능