티스토리 뷰
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 |