반응형
디자인패턴
[Java][디자인 패턴] 7. 어댑터 패턴 (Adapter Pattern)
어댑터 패턴이란 코드를 재사용하기 위해 구조를 변경하는 패턴이다.
어댑터 패턴이란?
- 어댑터 패턴은 기존 코드를 재사용하기 위해 내적, 외적 구조를 변환하는 작업을 처리한다.
- 어댑터 패턴은 코드를 재사용하기 위한 인터페이스를 처리하고 인터페이스를 활용해 보정 코드를 사용한다.
- 어댑터 패턴은 기능상 문제없이 동작하는 코드가 단지 인터페이스 차이 때문에 사용할 수 없는 경우 많이 응용되는 패턴이다. 또 기존 코드에 오류가 있거나 보정 작업이 필요한 경우에도 유용하다.
- 어댑터 패턴은 오래된 레거시 코드나 라이브러리를 재사용할 때 유용한 패턴이다. 또한 어댑터 패턴은 서로 호환되지 않는 인터페이스를 가진 코드를 결함 하여 응용 프로그램에서 동작할 수 있도록 도와준다.
어댑터 패턴 구조
동작은 정상적으로 하지만 오래된 인터페이스를 지닌 RGB를 HDMI로 변환해야 하는 케이스를 생각해보자.
우리는 HDMIConverter라는 어댑터 클래스를 이용해서 인터페이스 규격을 변경하여 사용할 수 있다.
어댑터 패턴 코드
1.RGB, HDMI 클래스
public class RGB {
private byte[] images;
public byte[] getImages() {
return images;
}
public void setImages(byte[] images) {
this.images = images;
}
}
public class HDMI {
private byte[] images;
public HDMI(byte[] images) {
this.images = images;
}
public byte[] getImages() {
return images;
}
public void setImages(byte[] images) {
this.images = images;
}
}
2. Adpater 인터페이스
public interface Adapter {
HDMI convertRGBToHDMI(RGB rgb);
}
3. Adapter를 구현한 HDMIConverter 클래스
오래된 RGB 클래스를 HDMI로 변환해준다.
public class HDMIConverter implements Adapter {
@Override
public HDMI convertRGBToHDMI(RGB rgb) {
return new HDMI(rgb.getImages());
}
}
3.Adapter 테스트 코드
class HDMIConverterTest {
@Test
void converterTest() {
// given
byte[] imageBytes = "변환할 이미지 정보의 스트림".getBytes(StandardCharsets.UTF_8);
RGB rgb = new RGB();
rgb.setImages(imageBytes);
// when
HDMIConverter hdmiConverter = new HDMIConverter();
HDMI hdmi = hdmiConverter.convertRGBToHDMI(rgb);
// then
assertEquals(hdmi.getImages(), imageBytes);
}
}
어댑터 패턴의 장점과 단점
장점
- 어댑터 패턴은 구조 패턴 중 하나로 기존 클래스를 감싼 새로운 클래스를 생성한다. 그리고 새로운 클래스로 객체의 인터페이스를 재구성한다.
- 객체를 구성으로 결합하면 느슨한 연결 방식으로 보다 많은 유연성을 확보할 수 있다. 그리고 구성은 프로그램이 실행되는 도중에도 객체를 변경할 수 있다.
- 어댑터는 복잡한 객체 구조를 깔끔하게 정리하는 데 유용하다.
단점
- 객체를 구성으로 결합하면 어댑터는 클라이언트에서 사용하는 인터페이스 방식으로 메서드를 새로 생성한다. 어댑터가 새로운 메서드를 재구성할 때 추가 코드가 필요하다.
- 프로젝트에서 어댑터 패턴을 적용한다고 코드의 성능이 개선되지는 않는다. 오히려 어댑터를 통해야 하므로 속도가 저하된다.
Github 코드
참고 자료
1.쉽게 바로 써먹는 디자인 패턴 책
http://www.yes24.com/Product/Goods/93173296
반응형
'개발 > 디자인패턴' 카테고리의 다른 글
[Java][디자인 패턴] 9. 복합체 패턴 (Composite Pattern) (0) | 2022.03.08 |
---|---|
[Java][디자인 패턴] 8. 브리지 패턴 (Bridge Pattern) (1) | 2022.03.07 |
[Java][디자인 패턴] 6. 프로토타입 패턴 (Prototype Pattern) (0) | 2022.03.05 |
[Java][디자인 패턴] 5. 빌더 패턴 (Builder Pattern) (0) | 2022.03.04 |
[Java][디자인 패턴] 4. 추상 팩토리 패턴 (Abstract Factory Pattern) (0) | 2022.03.03 |