조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다.1. 정적 유틸리티 클래스와 싱글턴 패턴의 한계강한 결합 발생구현에 의존함 테스트 어려움 각 테스트 케이스별로 독립적으로 실행되어야 함테스트 간 상태 공유가 일어날 수 있음공유 자원이 존재할 경우, 다른 테스트에서 영향을 받을 수 있음 멀티스레드 환경여러 스레드가 동시에 자원을 접근하고 수정할 수 있음상태를 공유하는 방식이 경쟁 상태가 발생할 수 있음 2. 의존 객체 주입협력 객체의 인스턴스 생성 시, 생성자에 필요한 자원을 넘겨주는 방식협력하는 객체를 직접 인스턴스로 생성 X 느슨한 결합 인터페이스 타입으로 협력 객체를 받도록 선언어떤 구현체이든 주입하여 사용할 수 있음 테스트 대역 확보테스트 시 mock 객체를 넘겨주어 진..