getFoo를 실행할 때마다 새로운 객체를 생성해서 반환하는 것이 아니라, 미리 생성해둔 객체를 반환한다. 위의 getFoo는 flag의 값에 따라서 다른 타입의 객체를 반한시킨다. 타입은 하위 타입이어도 무방해진다. enumSet의 경우 리턴하는 객체의 개수에 따라
매개변수를 최소한으로 사용하는 생성자를 사용해서 인스턴스를 생성할 수 있다. 필요없는 매개변수도 넘겨야 하는 경우가 발생하는데, 보통 0 같은 기본값을 넘긴다. 아무런 매개변수를 받지 않는 생성자를 사용해서 인스턴스를 만들고, 세터를 통해 필요한 필드만을 설정한다. (
싱글톤 생성
유틸리티 클래스 생성 시 abstract를 사용하자.
자원을 직접 명시하지 말고 의존 객체 주입을 사용하자.
객체의 재사용
불필요한 객체 레퍼런스를 정리하자.
Cleaner, finalizer
equals의 재정의
hashCode 재정의
toString을 재정의
compareTo
클래스 접근 제한
public class
불변 클래스
컴포지션의 사용
가변인수 메소드를 호출하면 가변인수를 담기 위한 배열이 생성된다. 매개변수화 타입의 변수가 타입이 다른 객체를 참조하면 힙 오염이 발생한다. 컴파일러는 단순히 경고를 던지고, 실행시 castException이 발생한다. 이처럼 타입 안정성이 깨지니 제너릭 배열 매개변수
컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공type token : 컴파일타임 타입 정보와 런타임 타입 정보를 알아내기 위해 메서드들이 주고 받는 class 리터럴getFavorite 는 처음에 Map 에서 Class
열거 타입 자체는 클래스. 상수 하나당 자신의 인스턴스를 하나씩 생성 public static final 필드로 공개. 사실상 final외부 생성자를 제공하지않기 때문에, 딱 하나만 존재한다는 것이 보장된다. Comparable Serializable 구현.enum 타
EnumMap을 알아보자.
람다와 메소드 참조