Etc
Design Pattern - Adapter
SuperDT
2024. 4. 15. 00:00
Adapter Pattern은
기존의 클래스를 수정하지 않고
여러 곳에서 재사용 할 수 있게 도와주는 패턴입니다
주로 여러 클래스의 인터페이스를 일관되게 사용해야하는 경우에
사용을 하고 있습니다.
이론적으로 Target, Adaptee, Adapter 3가지로 구성되어 있는데
예를 들면 아래와 같습니다.
Target은 해당 패턴을 사용하고자 하는 클라이언트가 사용하는 인터페이스 입니다.
public interface Logger {
void log(String message);
}
Adaptee는 기존에 존재하는 클래스로 사용자가 이용하고자 하는 대상 클래스입니다.
public class LegacyLogger {
public void logMessage(String message) {
System.out.println("LegacyLogger: " + message);
}
}
Adapter는 Traget과 Adaptee를 포함하여 클라이언트에게 인터페이스를 제공해주는 클래스입니다.
public class LegacyLoggerAdapter implements Logger {
private LegacyLogger legacyLogger;
public LegacyLoggerAdapter(LegacyLogger legacyLogger) {
this.legacyLogger = legacyLogger;
}
@Override
public void log(String message) {
//LegacyLogger의 logMessage 메서드를 호출하여 로깅을 수행
legacyLogger.logMessage(message);
}
}
위와 같이 패턴을 사용함으로
기존 코드를 재사용하여 다른 기능을 추가하거나 일관되게 사용할 수 있게 됩니다.
public class Main {
public static void main(String[] args) {
//LegacyLogger를 Logger 인터페이스에 맞춰서 사용하기 위한 어댑터 생성
LegacyLogger legacyLogger = new LegacyLogger();
Logger logger = new LegacyLoggerAdapter(legacyLogger);
//클라이언트 코드에서는 Logger 인터페이스를 사용하여 로깅 수행
logger.log("Hello, world!");
}
}