원본 본문으로 이동하기

자바 9 신기능들

박용서 - 자바 9의 신기능들입니다. 참고(원문) : http://blog.takipi.com/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont/ https://www.sitepoint.com/ultimate-guide-to-java-9/ Private Interface Methods 필자는 인터페이스가 손상될까봐 좋아하지 않는 문법이지만... 자바 8에서 인터페이스의 디폴트 메서드가 나왔습니다. 자바 9에서는 이 디폴트 메서드의 private 버전이 나왔습니다. public interface InJava9 { // 이 sum은 디폴트 private 이기 때문에 디폴트 메서드에서만 접근이 가능하다. private int sum(int[] numbers) { return IntStream.of(numbers).sum(); } } 더 간략해진 try의 리소스 관리 자바 7에서 추가된 아래와 같은 리소스 관리를 할 수 있는 try가 있습니다. 매우 유용한 기능으로 close에 대한 예외처리를 try가 자동으로 해주는 기능입니다. void doSomethingWith(Connection connection) throws Exception { try(Connection c = connection) { c.doSomething(); } } 자바 9에서는 더 간단히 쓸 수 있습니다. void doSomethingWith(Connection connection) throws Exception { // 굳이 선언을 해 줄 필요가 없다. try(connection) { connection.doSomething(); } } 다이아몬드 연산자 자동인식 <T> Box<T> createBox(T content) { // 기존 자바 코드 T 를 명시해야 한다. return new Box<T>(content) { }; } 자바 9에서는 다음과 같이 쓸 수 있습니다. class inJava { <T> Box<T> createBox(T content) { // T를 명시할 필요없이 자동으로 추론한다. return new Box<>(content) { }; } Box<?> createCrazyBox(Object content) { // ? 를 content 를 보고 추론한다. List<?> innerList = Arrays.asList(content); // 필자도 정확히 이해되진 않지만 추론타입을 다중으로 추론할 수 없는 것 같습니다. // 따라서 다음 주석과 같이 사용할 수는 없습니다. // return new Box<>(innerList) { }; // 그래서 아래와 같이 사용해야 합니다. return new Box<List<?>>(innerList) { }; } } jshell (Java + REPL) - http://www.javarepl.com/console.html - http://openjdk.java.net/jeps/222 제이쉘이라는 이름에서도 알 수 있듯 쉘의 형태로 실행할 수 있는 자바입니다. 스크립트 언어처럼 바로 입력할 수 있습니다. > System.out.println("Hello World") 라고 입력할 수 있습니다. 추신 실험을 할수가 없어서 일단 여기까지만 적어두었습니다. 자세한것은 아래 사이트를 참고해주세요. https://www.sitepoint.com/ultimate-guide-to-java-9/ 시간이 되면 이 문서를 수정해서 다시 올릴 생각입니다. - 자바