자바/이펙티브자바

    [아이템 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

    많은 클래스가 하나 이상의 자원에 의존한다. 여기서 의존관계란 무엇일까? 'A가 B를 의존한다'의 의미는 의존대상 B가 변하면, 그것이 A에 영향을 미친다는 것이다. 예를 들어, 맞춤법 검사기는 사전에 의존하는데 이를 정적 클래스로 구현하면 아래와 같이 구현할 수 있다. public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } 비슷하게, 싱글톤으로 구현하는 경우도 있다. public class SpellC..

    [아이템 2] 생성자에 매개변수가 많다면 빌더를 고려하라

    정적 팩토리와 생성자에는 똑같은 제약이 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 1. 점층적 생성자 패턴 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식이다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public Nutrition..

    [아이템 1] 생성자 대신 정적 팩토리 메소드를 고려하라.

    객체 생성시 보통 public 생성자를 이용한다. 하지만, 생성자를 사용하는 방법 이외에 정적 팩토리 메소드를 사용해서 만들 수 있다. 정적 팩토리 메소드를 이용하여 생성하면 아래와 같은 장점이 있다. 첫 번째, 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면 정적 팩토리 메소드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. 또한, 생성자를 이용하면 같은 매개변수 타입을 가진 생성자는 하나만 만들 수 있다. 하지만 정적 팩터리 메서드를 이용하여 구현하게 되면, 이름을 통해 각 함수의 역할을 나타낼 수 있으므로 이러한 문제점을 해결할 수 있다. 두 번째, 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 인스턴..