[백업][가리사니] 자바 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)

System.out.println("Hello World") 라고 입력할 수 있습니다.

추신

실험을 할수가 없어서 일단 여기까지만 적어두었습니다. 자세한것은 아래 사이트를 참고해주세요. https://www.sitepoint.com/ultimate-guide-to-java-9/

시간이 되면 이 문서를 수정해서 다시 올릴 생각입니다.