[구조패턴] Adapter 패턴
Updated: Categories: DesignPatternAdapter 패턴에 대해 알아보자
그게 뭐야 ❓
- 기존 시스템에서 사용하던 인터페이스가 있을 때, 호환되지 않는 새로운 인터페이스를 사용해야할 때 사용한다.
ex) 220V 를 사용하는 한국에서 쓰던 기기들을 어댑터를 사용해 110V 를 쓰는곳에 가서도 그대로 쓸 수 있는 것처럼 - 호환을 위해 기존 인터페이스를 수정하지 않고 Adapter라는 클래스를 추가해 문제를 해결한다.
클래스 다이어그램
- 이것만 보고는 무슨 소리인지 도통 모르겠다
- 예시 코드를 만들어서 구조를 눈으로 직접 확인해보자.
문제상황
- 음악 파일을 플레이시켜주는 시스템이 있다고 해보자~
- 현재 시스템에서는 WAV 확장자 파일만을 플레이할 수 있는 플레이어밖에 없음
- 이 시스템에서 MP3, MP4 등의 확장자 파일도 플레이할 수 있게 만드려고 한다
- Adapter 패턴을 적용하여 코드 수정없이 구현해보자!
기존 시스템
변경된 시스템
- 추가하려는 확장자는 기존 시스템에서 사용하던 Player와 호환되지 않아(인터페이스가 다름) Adapter 클래스가 필요하다.
- 따라서 기존 Player 인터페이스를 상속받는 Adapter 클래스를 만들고,
기존 play 메소드에 OtherPlyer 인터페이스를 사용하여 오버라이딩한다. - 이렇게 구현하면 Main 클래스에서 기존 player 객체만으로 WAV, MP3, MP4 모두 플레이가 가능하다.
추가 정보
Arrays.asList()
메소드에서 어댑터 패턴을 사용한다고 함 😇
장점
- 메인코드에서 기존 인터페이스를 그대로 사용할 수 있어 많은 수정을 방지할 수 있다! (
OCP
원칙)
단점
- 찾아보니 어댑터 클래스에서 통일 시켜주는 부분을 하나씩 구현해야 하는게 단점이라고 하는데(
당연한거 아닌가?) 딱히 없는것 같다…
참고링크
- https://refactoring.guru/design-patterns/adapter
- https://niceman.tistory.com/141