Search

Adapter 패턴

Created
2023/08/18 10:23
현대자동차와 테슬라가 함께 협업한다고 생각해보자. 현대자동차에서 개발한 기능을 테슬라와 비교하며 운용해야 하는 상황인데, 현대자동차의 객체가 테슬라의 객체와 스펙이 달라서 개발을 둘러갈 상황에 처해 있다. 이 때 수월한 개발을 위해 인터페이스를 통일하면 좋을텐데… 좋은 방법이 없을까?
위와 같은 상황에서 채택해볼만한 것이 Adapter 패턴이다.
public interface HyundaiCar { public void rideLikeFly(); }
Java
복사
public interface TeslaCar { public void rideLikeWalk(); }
Java
복사
위와 같은 인터페이스에서 두 메서드는 서로 같은 역할이라고 했을 때, 아래와 같이 엮어내는 것이 가능하다.
public class TeslaCarAdapter implements HyundaiCar { private final TeslaCar teslaCar; public TeslaCarAdapter(TeslaCar teslaCar) { this.teslaCar = teslaCar; } @Override public void rideLikeFly() { teslaCar.rideLikeWalk(); } }
Java
복사
public DriveReport testDrive(HyundaiCar hyndaiCar) { // ... hyndaiCar.rideLikeFly(); // ... }
Java
복사
이를 실제로 위와 같이 운용하는 상황이라고 한다면, 아래 코드처럼 Adapter를 사용할 수 있다.
public void testScenario(HyundaiCar source, TeslaCar target) { HyundaiCar adapter = new TeslaCarAdapter(target); DriveReport sourceReport = testDrive(source); DriveReport adapterReport = testDrive(adapter); // ... }
Java
복사