728x90
반응형
[디자인 패턴] 어댑터 패턴(Adapter Pattern) 개념 정리
Adapter Pattern - 어댑터 패턴 (구조 패턴)
이미 만들어진 것을 그대로 사용할 수 없을 때, 필요한 형태로 사용할 수 있게 해주는 패턴.
이미 만들어진 것을 감싸는 형태여서 Wrapper 패턴이라고도 한다.
Adapter는 직독하면 "변환기" 정도로 해석됩니다.
핸드폰 충전기 처럼 핸드폰을 콘센트에 직접 접촉시켜 충전하지 않고 충전기라는 어댑터를 통해 핸드폰과 콘센트를 연결하여 충전합니다.
왜 이런 Adapter를 사용하는 것 일까요?
바로 기존에 이미 잘 구축되어 있는 것을 새로운 어떤 것이 사용할 때 양쪽 간의 호환성을 유지해주기 위함입니다.
자바에서도 직접적으로 메서드는 호출하지 않고 중간에 어댑터를 거쳐서 메서드를 호출하도록 하는 패턴이 바로 어댑터 패턴(Adapter Pattern)입니다.
Adapter pattern 어댑터 패턴 예제
로봇을 만드는데 여기에 팔을 붙여 위, 아래로 움직이게 하라
기존 코드
public interface ArmCore {
public abstract void up();
public abstract void down();
}
public class Arm implements ArmCore {
public Arm() {
System.out.println("Make Robot Arm");
}
@Override
public void up() {
System.out.println("Robot Arm Up");
}
@Override
public void down() {
System.out.println("Roboy Arm Down");
}
}
public class RobotSystem {
private ArmCore rightArm;
private ArmCore leftArm;
public RobotSystem (ArmCore rightArm, ArmCore leftArm) {
this.rightArm = rightArm;
this.leftArm = leftArm;
}
public void armUp(){
rightArm.up();
leftArm.up();
}
public void armDown(){
rightArm.down();
leftArm.down();
}
}
/* 로봇 작동 main*/
RobotSystem robot = new RobotSystem(new Arm(), new Arm());
robot.armDown();
robot.armUp();
수정 사항
왼쪽 팔을 신제품으로 교체해 주세요.
그런데 신제품의 소스는 수정해서는 안됩니다.
라는 내용의 수정사항을 전달받았다고 가정해봅시다.
계속 수정사항이 들어올 때마다 코드를 수정하고 고치고 하다보면 신제품이 나올 때마다 철야를 해야하는 상황이 생긴다.. 거기다 수정 후에 테스트가 추가도 또 필요하게 된다.. 이럴 때 Adapter를 만들어 적용하는 것입니다.
/* 신제품 팔 */
public class NewArm{
public NewArm(){
System.out.println("Make New Robot Arm");
}
public void lift() {
System.out.println("New Robot Arm lift");
}
public void fall() {
System.out.println("New Robot Arm fall");
}
}
/* 신제품 팔 Adapter */
public class NewArmAdapter extends NewArm implements ArmCore{
public NewArmAdapter() {
}
@Override
public void up() {
super.lift();
}
@Override
public void down() {
super.fall();
}
}
여기서 왼팔에 신제품 소스를 붙여주기 만 하면 됩니다!!
이러한 방식이 Apdapter Pattern을 적용한 것입니다.
/* 로봇 작동 main*/
// 여기서 왼팔에 신제품을 붙여주기만 하면 된다!
RobotSystem robot = new RobotSystem(new Arm(), new NewArmAdpter());
robot.armDown();
robot.armUp();
728x90
반응형
'IT knowledge > GoF & Architecture' 카테고리의 다른 글
Layered Architecture (계층화 아키텍처) 란 무엇인가? (0) | 2023.03.13 |
---|---|
[디자인 패턴] 데코레이터 패턴(Decorator Pattern) 정리 및 예제 - 구조패턴 (0) | 2021.04.15 |
[디자인 패턴] 싱글톤 패턴(Singleton Pattern) 정리 및 예제 - 생성 패턴 (4) | 2021.04.14 |
[디자인 패턴] 디자인 패턴(Design Pattern) 이란? - 개념 및 분류(생성 패턴, 구조 패턴, 행동 패턴) (0) | 2021.04.13 |
[디자인 패턴] 디자인 패턴 개념 및 종류와 SOLID원칙 (객체지향 5대 원칙) (0) | 2020.12.24 |