티스토리 뷰

IT/기타

Java9 - Private Interface Methods

K.Nero 2019. 3. 12. 23:54

Java8 이전 까지의 인터페이스는 variable/methods 에 대해서 다음 두 가지의 형태를 갖고 있었습니다.

- Constant variables (상수)
- Abstract methods (추상메소드)

그래서 우리는 인터페이스 안에서 메소드를 구현할 수 없고 더 정밀한 기본 구현을 할 수  없었습니다. 하지만 Java8 부터 인터페이스는 다음과 같은 형태를 갖을 수 있게 되었습니다.

- Constant variables
- Abstract methods
- Default methods (기본 메소드)
- Static methods (정적 메소드)

이제 기본 구현과 정적 메소드를 통해서 인터페이스 자체를 사용할 수 있게 되었습니다. (난 반댈세...)

Java9 부터는 (이제 그만~!!) 다음 타입들이 늘어났습니다.

- Constant variables
- Abstract methods
- Default methods
- Static methods
- Private methods (큰일...)
- Private Static methdos (더 이상 막을 수 없다..)

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");
   }
}

난 이쯤에서 객체지향에서의 인터페이스 역할이 무엇이었나를 깊게 고민해봐야 했다.. 객체지향의 인터페이스는 사용방법을 노출하는 수단이라고 생각했다. 사용하는 쪽에서 내부 구현을 신경쓰지 않고 사용방법만 숙지하고 사용할 수 있는. (getConnection 이라는 메소드를 갖고 있는 예제마저도 무섭다...)

자동차의 핸들을 돌리면 바퀴까지 힘이 어떻게 전달이 되는지 몰라도 핸들을 돌리면 바퀴가 돌아간다는 사실만 알고 사용하면 되는 것 처럼... 인터페이스에 구현코드가 들어가는 것은 편의성 때문일까 내가 인터페이스를 잘 못 알고 있던 것일까...

'IT > 기타' 카테고리의 다른 글

APM Scouter server password 만들기  (0) 2019.05.22
bitbucket pipelines 사용하기 (실전편)  (0) 2019.05.21
PostgreSQL 사용자 생성  (0) 2019.03.04
PostgreSQL 제약조건 변경  (0) 2019.01.22
bitbucket pipelines 사용하기  (0) 2018.12.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함