본문 바로가기
BackEnd

Engine에서 타입이 다른 인터페이스를 연결할 : 어댑터(Adapter) 패턴 ( SA,AA - DBA 및 K8S 타입 처리 )

by 313devgrp 2023. 6. 29.

어댑터(Adapter) 패턴은 한 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하는 패턴입니다. 이 패턴은 호환되지 않는 인터페이스를 가진 두 개의 클래스를 함께 작동할 수 있게 만들어줍니다. 자바 코드를 통해 어댑터 패턴의 예시를 살펴보겠습니다.

가정해보겠습니다. 우리는 소켓(Socket) 클래스를 사용하여 전기를 공급받는 기기를 제어하고 있습니다. 하지만 우리가 사용하려는 기기는 USB(Universal Serial Bus) 인터페이스를 사용합니다. 어댑터 패턴을 사용하여 소켓 클래스와 USB 기기를 함께 작동할 수 있도록 해보겠습니다.

먼저, 우리가 사용하려는 USB 기기를 나타내는 USBDevice 인터페이스를 정의합니다:

public interface USBDevice {
    void powerOn();
    void powerOff();
}

다음으로, 소켓 클래스를 나타내는 Socket 클래스를 만듭니다:

public class Socket {
    public void supplyPower() {
        System.out.println("Socket supplies power.");
    }
}

이제 어댑터 클래스인 SocketToUSBAdapter를 만들어 소켓 클래스를 USBDevice 인터페이스와 호환되는 형태로 변환합니다:

public class SocketToUSBAdapter implements USBDevice {
    private Socket socket;
    
    public SocketToUSBAdapter(Socket socket) {
        this.socket = socket;
    }
    
    @Override
    public void powerOn() {
        socket.supplyPower();
    }
    
    @Override
    public void powerOff() {
        // 여기서는 아무 동작도 수행하지 않음
    }
}

어댑터 클래스는 USBDevice 인터페이스를 구현하며, 내부에 소켓 객체를 가지고 있습니다. powerOn() 메서드에서는 소켓 클래스의 supplyPower() 메서드를 호출하여 전원을 공급합니다. powerOff() 메서드는 여기서는 아무 동작도 수행하지 않습니다.

마지막으로, 어댑터 패턴을 사용하여 소켓 클래스와 USB 기기를 함께 작동하는 예시 코드를 작성합니다:

public class Main {
    public static void main(String[] args) {
        // 소켓 객체 생성
        Socket socket = new Socket();
        
        // 어댑터를 사용하여 소켓을 USBDevice 인터페이스와 호환되는 형태로 변환
        USBDevice usbDevice = new SocketToUSBAdapter(socket);
        
        // USB 기기로 전원을 켬
        usbDevice.powerOn();
        
        // USB 기기로 전원을 끔
        usbDevice.powerOff();
    }
}

이 예시에서는 어댑터 클래스인 SocketToUSBAdapter(Adapter) 패턴은 한 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하는 패턴입니다. 이 패턴은 호환되지 않는 인터페이스를 가진 두 개의 클래스를 함께 작동할 수 있게 만들어줍니다.