EFFECTIVE JAVA 3/E를 읽고 정리한 시리즈를 시작하며 컴포넌트의 규칙과, 기술용어에 대해 간략히 정리합니다.
정적 팩터리 메서드를 사용할 때의 장점과 단점에 대해서 알아봅니다. 혹시 무작정 생성자만을 사용하고 있지는 않나요 ?
생성자에 매개변수가 많다면 어떤걸 사용할 수 있을까요? 점층적 생성자 패턴, 자바빈즈 패턴, 빌더 패턴에 대해 알아보자 !
싱글턴을 만드는 방법 세가지를 알아보자. 열거 타입으로 싱글턴을 만드는게 가장 바람직하다는 것을 알고 있었나요 ?
정적 메서드와 정적 필드만을 담은 클래스에선 생성자를 어떻게 선언하고 사용해야할까?
하나의 클래스가 여러 자원에 의존할때, 정적 유틸리티 클래스나 싱글턴을 사용하고 있나요? 의존 객체 주입에 대해 알아보자 !
같은 기능을 하는 객체를 반복적으로 생산하고 있나요? 객체를 재사용해야하는 이유에 대해 알아보자 !
가비지 컬렉터를 너무 신뢰하고 있지 않나요? 메모리 누수를 예방하는 방법에 대해 알아보자 !
finalizer와 cleaner를 사용하고 있나요? 대안과 사용하지 말아야할 이유에 대해 알아보자 !
아직도 try-finally를 쓰고 있나요? 훨씬 간결하고, 디버깅이 쉬운 try-with-resources에 대해 알아보자 !
접근 권한은 가능한 한 최소한을 유지하자.
public 클래스에서는 public 필드 쓰지 않길바라
불변 클래스에대해 알아보자 !
컴포지션에 대해 알고 있나요 ?
상속용 클래스를 설계하는 방법에 대해 알아보자 ! 아무 생각없이 상속을 일삼고 있지 않았나요?
인터페이스를 우선시 해야하는 이유 알고 있나요?
기존 인터페이스에 디폴트 메서드를 추가하는 것, 괜찮을까요?
상수 인터페이스를 사용한다면 반성하자!
태그 달린 클래스를 사용하고 있나요 ?
중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야하며 그 외의 쓰임새라면 톱 레벨 클래스로 만들어야 한다.
톱레벨 클래스 ! 어떻게 관리 되고 있나요?
로 타입을 쓰고 있진 않나요? 사용하지 말아야 하는 이유에 대해 알아보자 !
제네릭 타입을 쓰는 당신, 경고를 무시하고 있진 않나요 ?!
배열보다 리스트를 추천하는 이유를 알고 있나요?
제네릭 타입으로 바꿔봅시다!
열거 타입을 사용하자!
ordinal 메서드 절대 사용하지 말것 !!
아직 비트 필드를 사용하고 있다면 EnumSet을 고려하자 !
Enum을 사용한다면 배열이 아닌 EnumMap의 사용을 고려하자! 훨씬 유지보수하기 쉬울 것이다.
아직도 익명 클래스를 사용하고 있다면 람다를 고려해보세요 !
익명 클래스 보단, 람다. 람다 보단, 메서드 참조를 고려해보자!
함수형 인터페이스 직접 작성하기 전에 표준 함수형 인터페이스가 있는지 확인해보자 ! 없다면, 작성시 주의점에 대해 알아보자 !
스트림을 과용하고 있진 않은지 생각해보자.
유연성을 가진 가변인수, 어떻게 사용하는게 좋은지, 장점과 단점에 대해 알아봅니다 !
빈 컬렉션인 경우 null을 반환하고 있지는 않나요? 그냥 빈 컬렉션을 반환하는걸 고려해봅시다 !
옵셔널을 사용해보았나요 ? 반환시 주의점과 사용법에 대해 알아봅니다 !
문서화 주석을 작성하는 방법에 대해 알아보자 !!
문자열을 연결할 땐 +대신 StringBuilder를 고려하자
객체의 구현타입이 아닌, 인터페이스로 선언하자
리플렉션 기능, 유용하지만 어마무시한 단점 !
네이티브 메서드 아직도 무작정 사용중인가요? 이제는 고민해보고 사용할때 !
최적화를 하기전에 좋은 프로그램 작성과 설계 먼저 !
명명규칙을 철자 규칙과 문법 규칙으로 나눠 살펴보자 !
예외를 다른 상황에서 사용하고 있지 않나요? 가독성이 낮아지고 버그를 찾기 더 어려워집니다 !!
검사 예외, 런타임 예외, 에러 중 언제 무엇을 사용해야하는지 알아보자!!
과도한 검사 예외 사용은 예외 바깥으로 던지기, try-catch문의 사용을 강제해 클라이언트에게 부담을 줄 수 있으니, 다른 방법을 고려해보자 !
API를 참고해 예외가 던져지는 상황이 일치한다면 표준 예외를 재사용하자 !
예외 번역과, 예외 연쇄에 대해 알아보자 !!
가변데이터는 공유하지 말자 !
과도한 동기화는 성능을 떨어뜨리고, 교착상태를 가질 수 있으며 예상치 못한 결과를 빚어낼 수 있으니 주의하자 !
java.util.concurrent 패키지, 실행자 프레임워크등을 활용하자 !
java.util.concurrent의 고수준 유틸리티를 적극 활용하자 !
스레드 안전성 수준을 API 문서에 기재하자 !
지연 초기화는 필드의 초기화 시점을 그 값이 처음 필요할 때까지 늦추는 기법이다. 지연 초기화를 대신할 수 있는 관용구들을 알아본다!
실행 가능한 스레드 수를 적게 유지하는 방법은?