들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바를 공부하며 작성한 글입니다. 핵심정리 try-finally는 더 이상 최선의 방법이 아니다. (자바 7부터) try-with-resources를 사용하라 resources는 closable 인터페이스가 구현된 경우 자동으로 닫아준다. 가독성이 증가한다. 만들어지는 예외 정보도 훨씬 유용하다. try~finally에서 finally절은 항상 실행되기 때문에 그 안에서 자원을 반납했다. 좋은 방법이지만, 자바 8 이상에서는 Try With Resources가 최선의 방법이 된다. Try ~ finally 코드 살펴보기 : 코드 9-1 기존에는 try - finally 구문을 이용해서 자원을 회수해왔다. 현재 수준에서 이 코드는 문제가 없다. 예외가 발생하..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 아이템 14. Comparable을 구현할지 고민하라. 핵심 정리 : CompareTo 규약 CompareTo는 Objects.equals에 더해서 순서까지 비교할 수 있으며 Generic을 지원한다. 자기 자신(this)이 compartTo에 전달된 객체보다 작으면 음수, 같으면 0, 그면 양수를 리턴한다. 특정 값(-1, 1)이 나오길 기대하는 것이 아니라 양수, 음수인 것을 기대하고 만들어야 한다. 반사성, 대칭성, 추이성을 만족해야 한다. 반드시 따라야 하는 것은 아니지만 x.compareTo(y) == 0이라면 x.equals(y)가 true여야 한다. 소수점 자리인 경우에는 이 방식을 따르지 못할 수 있음...
완벽공략 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 } 위 클래스처럼 많은 필드를 가지는 클래스가 있다고 가정해보자. 이 중 어떤 필드는 필수지만, 어떤 필드는 선택적이다. 이런 클래스가 있을 때, 인스턴스를 생성한다면 어떤..