산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 9 프라이빗 인터페이스 메서드: 캡슐화 및 코드 재사용 강화

Java 8 이전에는 인터페이스에 다음 유형의 변수/메서드만 가질 수 있었습니다.

따라서 인터페이스에 메서드 구현, 즉 기본 구현을 가질 수 없었습니다. 예제를 보겠습니다.

Java 7 스타일 (인터페이스에 구현 없음)

public class Tester {
    public static void main(String[] args) {
        LogOracle log = new LogOracle();
        log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal("");
        LogMySql log1 = new LogMySql();
        log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal("");
    }
}

final class LogOracle implements Logging {
    @Override public void logInfo(String message) { getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); }
    @Override public void logWarn(String message) { getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); }
    @Override public void logError(String message) { getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); }
    @Override public void logFatal(String message) { getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); }
    @Override public void getConnection() { System.out.println("Open Database connection"); }
    @Override public void closeConnection() { System.out.println("Close Database connection"); }
}

final class LogMySql implements Logging {
    @Override public void logInfo(String message) { getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); }
    @Override public void logWarn(String message) { getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); }
    @Override public void logError(String message) { getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); }
    @Override public void logFatal(String message) { getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); }
    @Override public void getConnection() { System.out.println("Open Database connection"); }
    @Override public void closeConnection() { System.out.println("Close Database connection"); }
}

interface Logging {
    String ORACLE = "Oracle_Database";
    String MYSQL = "MySql_Database";
    void logInfo(String message);
    void logWarn(String message);
    void logError(String message);
    void logFatal(String message);
    void getConnection();
    void closeConnection();
}

출력

Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection

위 예제에서 각 로그 메서드가 자체 구현을 가집니다. Java 8부터 인터페이스는 다음 유형을 가질 수 있습니다.

Java 8: 인터페이스에 기본 구현과 정적 메서드 사용

public class Tester {
    public static void main(String[] args) {
        LogOracle log = new LogOracle();
        log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal("");
        LogMySql log1 = new LogMySql();
        log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal("");
    }
}

final class LogOracle implements Logging { }
final class LogMySql implements Logging { }

interface Logging {
    String ORACLE = "Oracle_Database";
    String MYSQL = "MySql_Database";
    default void logInfo(String message) { getConnection(); System.out.println("Log Message : " + "INFO"); closeConnection(); }
    default void logWarn(String message) { getConnection(); System.out.println("Log Message : " + "WARN"); closeConnection(); }
    default void logError(String message) { getConnection(); System.out.println("Log Message : " + "ERROR"); closeConnection(); }
    default void logFatal(String message) { getConnection(); System.out.println("Log Message : " + "FATAL"); closeConnection(); }
    static void getConnection() { System.out.println("Open Database connection"); }
    static void closeConnection() { System.out.println("Close Database connection"); }
}

출력

Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection

위 예제에서도 중복이 있습니다. Java 9부터 인터페이스는 다음 유형을 가질 수 있습니다.

Java 9: 프라이빗 메서드 사용으로 중복 제거

public class Tester {
    public static void main(String[] args) {
        LogOracle log = new LogOracle();
        log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal("");
        LogMySql log1 = new LogMySql();
        log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal("");
    }
}

final class LogOracle implements Logging { }
final class LogMySql implements Logging { }

interface Logging {
    String ORACLE = "Oracle_Database";
    String MYSQL = "MySql_Database";
    
    private void log(String message, String prefix) {
        getConnection();
        System.out.println("Log Message : " + prefix);
        closeConnection();
    }
    
    default void logInfo(String message) { log(message, "INFO"); }
    default void logWarn(String message) { log(message, "WARN"); }
    default void logError(String message) { log(message, "ERROR"); }
    default void logFatal(String message) { log(message, "FATAL"); }
    
    private static void getConnection() { System.out.println("Open Database connection"); }
    private static void closeConnection() { System.out.println("Close Database connection"); }
}

출력

Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection

java

  1. Java 메서드: 정의, 호출, 효과적 활용법
  2. Java 추상 클래스와 메서드 완벽 가이드
  3. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  4. Java NavigableSet 인터페이스 완전 정복: 탐색, 정렬, 실전 예제
  5. Java 람다 표현식 마스터하기: 기초부터 Stream API까지
  6. Java String toLowerCase() & toUpperCase(): 로케일 인식 텍스트 대소문자 변환
  7. 자바 인터페이스 이해하기: 정의, 용도, 모범 사례
  8. 자바 이메일 전송 완벽 가이드: JavaMail API 활용법
  9. Java 9 컬렉션 팩토리 메서드: 불변 List, Set, Map 생성 단순화
  10. Java 8 기본 메서드 설명: 인터페이스 향상 및 하위 호환성