Clean Code that Works.

음..
자바의 정석에서 발췌.

1. 제네릭스(Generics)
- 제네릭스는 컬력신 프레임웍과 관련된 기능으로 컬렉션에 저장하는 객체의 타입을 컴파일시에 체크하기 때문에 객체의 타입 안정성을 높이고 꺼낼 때는 자동으로 형변환해주기 때문에 편리하다.

2. 향상된 for문
- 배열
    for (배열의 타입 변수명 : 배명) {
          // 반복할 문장
    }
- 컬렉션
    for (컬렉션에 저장된 요소의 타입 변수명 : 컬렉션) {
          // 반복할 문장
    }

3. 오토박싱
- 컬렉션에는 객체로 저장해야하기 때문에 기본형 값을 저장하기 위해서는 Integer나 Long과 같은 Wrapper클래스를 사용해야했다.
  그러나 이제부터는 기본현 값을 직접 컬렉션에 저장할 수 있다. 컴파일러에 의해서 자동적으로 Wrapper클래스로 변환되어 저장되는 데 이것을 오토박싱 이라고 한다.
  뿐만아니라 저장되 값을 꺼낼 때도 변환과정을 거치지 않고도 기본형 형태의 값을 바로 얻을 수 있는데 이것을 언박싱 이라고 한다.

4. 타입에 안전한 열거형
- 이전 방식으로는 타입이 달라고 값이 같으면 조건식결과가 true였으나, 새로 도입된 타입에 안전한 영거형에서는 실제 값이 같아도 타입이 다르면 조건식의 결과가 false가 된다.

5. 가변인수
- 기존에는 메서드의 매개변수 개수를 고정적으로 지정해주어야만 했으나 JDK1.5 부터는 동적으로 매개변수의 개수를 지정해 줄 수 있게 되었다.

6. static import문
- import문을 사용하면 크래스의 패키지명을 생략할 수 있는 것과 같이 static import문을 사용하면 static멤버를 호출할 때 클래스명을 생략할 수 있다.

7. StringBuilder
- StringBuilder는 StringBuffer와 완전히 동일한 클래스이다. 다만 동기화 처리를 하지 않기 때문에 멀티쓰레드 프로그래밍에서는 사용하면 안되지만 멀티쓰레드 프로그래밍이 아닌 경우에는 StringBuffer보다 빠른 성능을 보장한다.
  동기화여 부를 제외하고는 두 클래스가 기능상으로 완전히 동일하기 때문에 코드에서 StringBuffer를 StringBuilder로 바꾸기만 하면 된다. 즉, StringBuffer타입의 참조 변수를 선언한 부분과 StringBuffer의 생성자만 바꾸면 된다는 말이다.