Java 7의 Project Coin 중 몇가지

Java 7 (그리고 8)에 포함된 Project Coin 중 유용하지만 (상대적으로) 자주 언급되지 않은 몇 가지.

Binary Literals

Java 7 이전에는 binary 값으로 무언가 하려 하면 ‘parseX’ 메소드를 써야 했다.
예를 들어 “1100110”을 십진수 102로 변수에 지정하려면 아래와 같았다.

하지만 Java 7 부터는 아래와 같다. (왠지 너무나 당연하다)

또다른 재미있는 것 하나는, 긴 숫자 사이에 ‘_’ (underscore)를 넣어 표현할 수 있다는 것이다. (Ruby에서 아이디어를 가져왔다고 한다)
이 ‘_’는 compiler가 나중에 다 지워버리기 때문에 상관없다.

아래 예를 보면 가독성이 확실히 차이남을 알 수 있다.

TWR(Try-with-resources)

Project Coin 쪽에 본 기능에 대한 제안이 도착했을 때 밝혀진 놀라운 사실 하나는, JDK 내 close()를 사용한 code 60% 이상이 bug를 내포하고 있었다는 것이다. (사실 사용한 resource를 100% 확실하게 close 하는 것이 쉽진 않다)

아래 내용은 TWGJD(The Well-Grounded Java Developer, 2013)에서 가져온 것이다.

코드를 보면 InputStream이나 File (즉 OutputStream) 어느 쪽에서도 뭔 일이 벌어질 수 있고, 특히 이런 식으로 exception이 엉켜있게 되면 문제가 생겼을 때 처리하기 여간 성가신 것이 아니다.

그래서, 아래와 같은 문법이 등장했다.
즉 exception이 발생하게 되면 자동으로 모든 열려있는 resource를 close 해준다.

한가지 주의할 점은, 아래와 같은 code는 ObjectInputStream 생성 중 에러가 발생할 경우 FileInputStream을 close 하지 못할 수 있다.

해결책은, 좀 덜 멋있더라도(?) 분리해놓으면 된다.
아래와 같이.