호환성
220V들어오는 것을 5V로 낮춰야 한다 이것을 해주는 것이 어댑터다


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