[백업][가리사니] 자바 9 신기능들
java
이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.
자바 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/
시간이 되면 이 문서를 수정해서 다시 올릴 생각입니다.