본문 바로가기

프로그래밍/Java

Java_어댑터 패턴

어댑터 패턴

: 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

 
 

어댑터 패턴 예제

MyHouse 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package ch01;
 
public class MyHouse {
 
    // main 함수
    public static void main(String[] args) {
        AirConditional airConditional = new AirConditional();
        Cleaner cleaner = new Cleaner();
        HairDryer hairDryer = new HairDryer();
        WashingMachine washingMachine = new WashingMachine();
        
        // 인터페이스와 다형성
        connect(airConditional);
        connect(cleaner);
 
        // 철물점에서 어댑터 준비
        TencoAdapter adapterHairDryer = new TencoAdapter(hairDryer);
        connect(adapterHairDryer);
        
        TencoAdapter adapterWashingMachine = new TencoAdapter(washingMachine);
        connect(adapterWashingMachine);
 
    } // end of main
 
    // MyHouse static
    // 전기 콘센트
    public static void connect(IElectronic220v iElectronic220v) {
        iElectronic220v.connect();
    }
 
// end of class
cs

 
Airconditional 클래스

1
2
3
4
5
6
7
8
9
10
package ch01;
 
public class Airconditional implements IElectronic220v{
 
    //전기를 연결하다.
    @Override
    public void connect() {
        System.out.println("에어컨 연결 220V ON");
    }
}
cs

 
Cleaner 클래스

1
2
3
4
5
6
7
8
9
10
11
package ch01;
 
public class Cleaner implements IElectronic220v{
 
    //전기를 연결하다.
    @Override
    public void connect() {
        System.out.println("청소기 연결 220V ON");
    }
    
}
cs

 
WashingMachine 클래스

1
2
3
4
5
6
7
8
9
10
package ch01;
 
public class WashingMachine implements IElectronic110v{
 
    @Override
    public void connect() {
        System.out.println("세탁기 연결 110V ON");
    }
 
}
cs

 
IElectronic220v 인터페이스

1
2
3
4
5
package ch01;
 
public interface IElectronic220v {
    void connect();
}
cs

 
IElectronic110v 인터페이스

1
2
3
4
5
package ch01;
 
public interface IElectronic110v {
    void connect();
}
cs

 
HairDryer 클래스 (110v 연결)

1
2
3
4
5
6
7
8
9
10
package ch01;
 
public class HairDryer implements IElectronic110v{
 
    @Override
    public void connect() {
        System.out.println("헤어드라이기 연결 110V ON");
    }
    
}
cs

 
TencoAdapter 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package ch01;
 
/*
 * 
 * 어댑터 패턴 설정
 * 인터페이스로 선언하면 코드를 유연하게 설계 가능
 * 
 * */
//기존에 연결해야할 인터페이스를 구현하고
public class TencoAdapter implements IElectronic220v {
 
    // 변환해야 할 인터페이스를 선언해 생성자를 매개변수로 넣어서 연결하기
    IElectronic110v iElectronic110v;
 
    public TencoAdapter(IElectronic110v iElectronic110v) {
        this.iElectronic110v = iElectronic110v;
    }
 
    @Override
    public void connect() {
        iElectronic110v.connect();
    }
 
}
cs

→ Adapter로 사용할 클래스에 기존에 연결해야 할 인터페이스를 구현하고 변환해야 할 인터페이스를 멤버 변수로 선언해 생성자를 매개변수로 넣어서 연결하면 유연하게 클래스와 인터페이스를 연결하여 사용할 수 있다.
 

콘솔 화면

'프로그래밍 > Java' 카테고리의 다른 글

Java_옵저버 패턴  (0) 2023.04.13
Java_스트림(Stream)  (0) 2023.04.09
Java_템플릿 메서드 패턴, 싱글톤 패턴, 빌더 패턴  (1) 2023.03.23
Java_람다식(Lambda Expression)  (1) 2023.03.22
Java_소켓(Socket) 통신  (0) 2023.03.04