본문 바로가기
Spring/디자인패턴

Adapter Pattern(어댑터 패턴)

by 미눅스[멘토] 2023. 7. 19.
728x90

Adapter는 실생활에서는 100v 를 220v로 변경해주거나, 그 반대로 해주는 흔히돼지코 라고 불리는 변환기를 예로 들 수 있다.  호환성이 없는 기존 클래스의 인터페이스를 변환하여재사용 할 수 있도록 한다.

SOLID중에서 개방폐쇠 원칙(OCP)를 따른다.

 

 

 

 

 

 

 

 

ex)우리집에있는 가전제품

헤어드라이기 110V

청소기 220V

에어컨 220V

 

 

 

 

 

Electronic110V 인터페이스

package Muzi.adapter;

public interface Electronic110V {

	void powerOn();
}

 

 

Electronic220V인터페이스

package Muzi.adapter;

public interface Electronic220V {

	void connect();
}

 

 

 

 

Airconditioner 클래스(220V)

package Muzi.adapter;

public class Airconditioner implements Electronic220V{

	@Override
	public void connect() {
		System.out.println("에어컨 220V on");
	}

}

 

Cleaner 클래스(220V)

package Muzi.adapter;

public class Cleaner implements Electronic220V{

	@Override
	public void connect() {
		System.out.println("청소기 220V on");
	}
	
}

 

HairDryer 클래스(110V)

package Muzi.adapter;

public class HairDryer implements Electronic110V{

	@Override
	public void powerOn() {
		System.out.println("헤어 드라이기 110v on");
	}
}

 

 

 

ex) 우리집에서 사용 가능한것은 110V가전제품이다.

하지만 HairDry클래스만 110V이고 나머지 전자제품들은 220V이다

그래서 110V사용 가능한건 HairDry인데 나머지 용품들도

우리 집에서 110V로 사용 하고 싶다 

그래서 슈퍼에가서 Adapter를 사왔다.

 

 

 

 

SocketAdapter 클래스

package Muzi.adapter;

public class SocketAdapter implements Electronic110V {

	private Electronic220V electronic220V;

	
	public SocketAdapter(Electronic220V electronic220V) {
		this.electronic220V = electronic220V;
	}
	
	@Override
	public void powerOn() {
		electronic220V.connect();
	}
	
}

 

 

 

 

 

package Muzi.singleton;

import Muzi.adapter.Airconditioner;
import Muzi.adapter.Cleaner;
import Muzi.adapter.Electronic110V;
import Muzi.adapter.HairDryer;
import Muzi.adapter.SocketAdapter;

public class Main {
	public static void main(String[] args) {
		
        
        //헤어 드라이기만 110V라서 사용가능한건 헤어드라이기이다
		HairDryer hairDryer = new HairDryer();
		connect(hairDryer);
		
        //그래서 다른 기기들도 사용하기 위해 슈퍼에 가서
        //new SocketAdapter을 사와 cleaner(청소기)와 연결해주고
        //다시 연결을 했더니 가동이 되었다
		Cleaner cleaner = new Cleaner();
		Electronic110V adapter = new SocketAdapter(cleaner);
		connect(adapter);
		
        //그래서 다른 기기들도 사용하기 위해 슈퍼에 가서
        //new SocketAdapter을 사와 airconditioner(에어컨)과 연결해주고
        //다시 연결을 했더니 가동이 되었다
		Airconditioner airconditioner = new Airconditioner();
		Electronic110V airAdapter = new SocketAdapter(airconditioner);
		connect(airAdapter);
	}
	
	//콘센트
	public static void connect(Electronic110V electonic110V) {
		electonic110V.powerOn();
	}
	
	
	
}

 

 

이렇게

인터페이스가 달라서 맞춰지지 못할떄 중간에 adapter라는 클래스를 두고

연결시켜 줄 수 있는 형태를 가지는것이 adapter패턴이다.