Java/Effective Java11 [아이템 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 SpellChecker라는 맞춤법을 검사하는 클래스가 있다. 이 클래스는 Lexicon이란 사전 클래스를 의존한다. 코드는 아래와 같다. class SpellChecker { private static final Lexicon dictionary = new KoreanDictionary(); public static boolean isValid(String word) { return true; } public static List suggestions(String typo) { return new ArrayList(); } } class KoreanDictionary implements Lexicon { } interface Lexicon { } 코드에선 KoreanDictionary를 직접 생성해서 사.. 2021. 12. 20. [아이템 4] 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 필드나 정적 메서드만 가지고 클래스를 구성한다면 인스턴스를 생성할 필요가 없는 클래스가 된다. 이런 경우 private 생성자를 통해 인스턴스화를 막으면 된다. class UtilityClass { private UtilityClass() { throw new AssertionError("인스턴스 생성 방지"); } } 2021. 9. 30. [아이템 3] private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글톤(singleton)이란 인스턴스를 하나만 생성할 수 있는 클래스를 말한다. 책에서 소개하는 싱글톤 구현 방법을 간단히 보겠다. 1. public static final 필드 방식의 싱글턴 class Elvis_Field { public static final Elvis_Field INSTANCE = new Elvis_Field(); private Elvis_Field() { } } 2. 정적 팩터리 방식의 싱글턴 class Elvis_Method { private static final Elvis_Method INSTANCE = new Elvis_Method(); private Elvis_Method() { } public static Elvis_Method getInstance() { retur.. 2021. 9. 30. [아이템 2] 생성자에 매개변수가 많다면 빌더를 고려하라 책에서는 선택적 매개변수가 많은 클래스의 인스턴스를 생성하는데 점층적 생성자 패턴(telescoping constructor pattern)과 자바빈즈 패턴(JavaBeans pattern) 그리고 아이템 2의 주제인 빌더 패턴(Builder pattern)을 소개하고 있어 간단히 설명해 보겠다. 1. 점층적 생성자 패턴(telescoping constructor pattern) class NutritionFacts1 { // 필수 private final int servingSize; private final int servings; // 선택 private final int calories; private final int fat; private final int sodium; private fina.. 2021. 9. 28. [아이템 1] 생성자 대신 정적 팩터리 메서드를 고려하라 자바에서 인스턴스를 생성하는 대표적인 방법은 new 키워드를 사용해 생성자를 호출하는 것이다. 기본적으로 파라미터가 없는 디폴트 생성자를 제공하며, 상황에 따라 파라미터를 추가해 다양한 생성자를 만들 수 있다. 이펙티브 자바 1장에서는 정적 팩토리 메서드를 소개한다. 처음 정적 팩토리 메서드란 표현이 낯설었는데 개념은 간단하다. 인스턴스를 반환하는 static method이다. 책에서 소개하는 정적 팩토리 메서드의 장점 1. 이름을 가질 수 있다. 생성자의 이름은 클래스명과 동일하게 만들어야 한다. 하지만 method는 다양하게 작명이 가능하고, 오버로딩을 통해 같은 이름의 메서드도 여러 개 만들 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 예로 Boolean.valueOf() .. 2021. 9. 11. 이전 1 2 다음 728x90