완벽공략 NullPointerException (완벽공략 19) WeakHashMap (완벽공략 20) WeakReference Executor 백그라운드 쓰레드 (완벽공략 21) ScheduledThreadPoolExecutor 아이템7에서 나오고, 부수적으로 살펴볼만한 내용은 다음과 같다. 완벽 공략 19. NullPointerException Java 8 Optional을 활용해서 NPE를 최대한 피하는 것이 좋다. NullPointerException을 만나는 이유는 다음과 같다. 메소드에서 null을 리턴하기 때문 + null 체크를 하지 않았기 때문 메소드에서 적절한 값을 리턴할 수 없는 경우에 선택할 수 있는 대안 예외를 던진다 null을 리턴한다 Optional을 리턴한다. 아래의 코드를 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 아이템5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 이 챕터와 관련된 완벽공략은 다음과 같다 p29. 이 패턴의 쓸만한 변형으로 생성자에 자원 팩터리를 넘겨주는 방식이 있다. p29. 자바 8에서 소개한 Supplier 인터페이스가 팩토리를 표현한 완벽한 예시다 p29. 한정적 와일드카드 타입을 사용해 팩토리의 타입 매개변수를 제한해야 한다 p29. 팩토리 메서드 패턴 p30. 의존 객체가 많은 경우에 Dagger, Guice, 스프링 같은 프레임워크 도입을 고려할 수 있다. 아래에서 설명을 함께 보고자 한다. 생성자에 자원 팩터리를 넘겨주는 방식 + Supplier 함수형 인터페이스가 팩토리를 표현한 완벽한 예시다 I..
정적 팩터리와 생성자에 선택적 매개변수가 많을 때 고려할 수 있는 방안 public class NutritionFacts { private final int servingSize; // Required private final int servings; // Required private final int calories; // Option private final int fat; // Option private final int sodium; // Option private final int carbohydrate; // Option } 위 클래스처럼 많은 필드를 가지는 클래스가 있다고 가정해보자. 이 중 어떤 필드는 필수지만, 어떤 필드는 선택적이다. 이런 클래스가 있을 때, 인스턴스를 생성한다면 어떤..
들어가기 전 이 글은 인프런 백기선님의 강의를 공부하며 정리한 글입니다 아이템5. 자원을 직접 명시하지 말고 의존객체 주입을 사용하라. 아이템 5의 핵심을 정리하면 다음과 같다. 사용하는 자원에 따라 동작이 달라지는 클래스는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 의존 객체 주입(Dependency Injection)이란 인스턴스를 생성할 때 필요한 자원을 넘겨주는 방식이다. DI의 변형으로 생성자에 자원 팩터리를 넘겨줄 수 있다. DI를 사용하면 클래스의 유연성, 재사용성, 테스트 용이성을 개선할 수 있다. 모든 경우에 대해서 DI를 사용해야하는 것은 아니다. DI를 사용하면 좋은 경우는 다음과 같다. 자원을 직접 명시해서 사용한다. 사용하는 자원의 종류에 따라 다른 동작을 한다. 위 두..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라. 정적 메서드만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 클래스가 아니다. 따라서 인스턴스 생성을 방지하는 것이 좋다 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. 생성자에 주석으로 인스턴스화가 불가능한 이유를 설명하는 것이 좋다. 상속을 방지할 때도 같은 방법을 사용할 수 있다. 어플리케이션을 설계할 때, 어떤 경우에는 특정 클래스의 인스턴스를 만들 필요가 없는 경우가 있다. 오히려 인스턴스를 만들지 않는 것을 권장하는 경우도 존재한다. 대표적인 경우는 유틸리티성 클래스..