어댑터 패턴

윤주헌's avatar
Aug 13, 2024
어댑터 패턴
호환성
220V들어오는 것을 5V로 낮춰야 한다 이것을 해주는 것이 어댑터다
notion image
notion image

1. 언제 어댑터 사용 하냐?

  1. 이미 만들어진 것이 시스템에 호환이 안될 때
  1. 아직 안 만들어 졌는데 어떻게 만들지 모를 때
 
외부 토끼를 만들었어 이거를 시스템에 사용할 거다.
 

알아야 하는 것!!

💡
어댑터 → 어댑터가 적혀있을 때 기존에 호환 안되는 무언가가 있었다
💡
프록시가 적혀있다 → 기존의 어떤 클래스에 부가 기능이 들어가야 하는구나
 
외부 라이브러리 것 빼두고 싶을 때 사용 끼워 맞춰준다
 
default가 인터페이스에서 몸체를 구현할 수 있다. 어댑터(abstract) 만들어 구현하기 귀찮아서 해준다

2. 예시

public class OuterRabbit { private String fullname = "토끼"; public String getFullname() { return fullname; } }
외부에서 토끼를 가지고 왔다
 
public class RabbitAdapter extends Animal { private OuterRabbit rabbit; public RabbitAdapter(OuterRabbit rabbit) { this.rabbit = rabbit; } @Override public String getName() { return rabbit.getFullname(); } }
토끼를 어댑터 하여 컴퍼지션(has a) 해서 변환 시켜준다 그리고 animal extend해줘서 사용한다
 
결과 →
public class App { public static void main(String[] args) { Mouse m1 = new Mouse(); Tiger t1 = new Tiger(); Doorman d1 = new Doorman(); d1.쫓아내(t1); d1.쫓아내(m1); RabbitAdapter rabbit = new RabbitAdapter(new OuterRabbit()); d1.쫓아내(rabbit); /* OuterRabbit r1 = new OuterRabbit(); d1.쫓아내(r1); */ } }
 

3. 인터페이스 사용 시 어댑터 사용법

3.1 보통의 경우

백종원씨는 칼로 요리만 하고 싶은데 공격이라는 메서드도 있어서 사용해야 한다
interface 나이프{ void attack(); void cook(); } class 백종원 implements 나이프 { @Override public void attack() { } @Override public void cook() { } }

3.2 어댑터 사용

공격을 tools가 어댑터 해주고 백종원씨는 그냥 요리만 사용할 수 있다.
interface 나이프{ void attack(); void cook(); } abstract class tools implements 나이프 { public void attack(){}; } class 백종원 extends tools { @Override public void cook() { System.out.println("김치찌개 만들기"); } }

4. default 인터페이스

interface 사용할 때 마다 어댑터를 만들어 줘야 하니 귀찮아서 default 인터페이스를 JAVA8부터 사용함
interface 나이프{ default void attack() {} default void cook(){} } class 백종원 implements 나이프 { @Override public void cook() { System.out.println("김치찌개 만들기"); } }
Share article

code-sudal