inblog logo
|
code-sudal
    design pattern

    어댑터 패턴

    윤주헌's avatar
    윤주헌
    Aug 13, 2024
    어댑터 패턴
    Contents
    1. 언제 어댑터 사용 하냐?2. 예시3. 인터페이스 사용 시 어댑터 사용법4. default 인터페이스
    호환성
    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

    RSS·Powered by Inblog