package CHAPTER07;

// 로깅 시스템 인터페이스
interface Logger {
    // 상수 (모든 변수는 자동으로 public static final)
    String DEFAULT_FORMAT = "[LOG]";

    // 추상 메소드 (각 로그 방식별로 구현 필요)
    void log(String message);

    // 정적 메소드 (Java 8 이상 지원) - 공통적인 기능 제공
    static void printLogInfo() {
        System.out.println("Logger 인터페이스를 사용하여 로깅 처리를 할 수 있음.");
    }
}

// 콘솔 로그 클래스 (Logger 인터페이스 구현)
class ConsoleLogger implements Logger {
    @Override
    public void log(String message) {
        System.out.println(DEFAULT_FORMAT + " 콘솔 로그: " + message);
    }
}

// 파일 로그 클래스 (Logger 인터페이스 구현)
class FileLogger implements Logger {
    @Override
    public void log(String message) {
        System.out.println(DEFAULT_FORMAT + " 파일에 로그를 저장: " + message);
    }
}

// 메인 클래스: 로깅 시스템 테스트
public class InterfaceLogger {
    public static void main(String[] args) {
        // 정적 메소드 호출 (클래스처럼 인터페이스 이름으로 직접 호출 가능)
        Logger.printLogInfo();

        System.out.println(); // 개행

        // 콘솔 로거 객체 생성 및 사용
        Logger consoleLogger = new ConsoleLogger();
        consoleLogger.log("애플리케이션 시작");

        System.out.println(); // 개행

        // 파일 로거 객체 생성 및 사용
        Logger fileLogger = new FileLogger();
        fileLogger.log("에러 발생: 파일을 찾을 수 없음");
    }
}
