[java] 자바 함수형 인터페이스를 사용하여 유연한 로깅을 구현하는 방법은 어떻게 되나요?
로그를 출력하는 공통 기능을 가진 함수형 인터페이스를 정의하면, 해당 인터페이스를 구현하여 다양한 로그 메시지를 처리할 수 있습니다. 이렇게 하면 로깅 로직을 변경할 때마다 기존 코드를 수정하지 않고도 유연하게 대처할 수 있습니다.
다음은 자바 함수형 인터페이스를 사용하여 유연한 로깅을 구현하는 예제 코드입니다.
@FunctionalInterface
interface Logger {
void log(String message);
}
class FileLogger implements Logger {
@Override
public void log(String message) {
// 파일에 로그 메시지를 기록하는 코드 작성
System.out.println("File Logger: " + message);
}
}
class ConsoleLogger implements Logger {
@Override
public void log(String message) {
// 콘솔에 로그 메시지를 출력하는 코드 작성
System.out.println("Console Logger: " + message);
}
}
class Application {
private Logger logger;
public Application(Logger logger) {
this.logger = logger;
}
public void doSomething() {
logger.log("Doing something...");
// 작업 수행 코드 작성
}
}
public class Main {
public static void main(String[] args) {
Logger fileLogger = new FileLogger();
Logger consoleLogger = new ConsoleLogger();
Application app1 = new Application(fileLogger);
app1.doSomething();
Application app2 = new Application(consoleLogger);
app2.doSomething();
}
}
위의 예제에서는 Logger라는 함수형 인터페이스를 정의하였습니다. FileLogger와 ConsoleLogger는 Logger 인터페이스를 구현하여 각각 파일과 콘솔에 로그를 출력하는 동작을 구현하였습니다.
Application 클래스는 Logger 인터페이스를 사용하여 로깅을 수행합니다. 생성자를 통해 원하는 로깅 방식을 주입할 수 있으며, doSomething 메서드를 호출할 때마다 해당 로깅 방식에 따라 로그를 출력합니다.
이와 같이 자바 함수형 인터페이스를 활용하면 로깅과 같은 공통 기능을 유연하게 처리할 수 있습니다.