책
-
item 5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라책/이펙티브 자바 2022. 2. 15. 20:51
ITEM 5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 자원을 코드에 직접 명시하지 말자 java로 개발을 하다 보면 많은 클래스가 여러개의 자원에 의존하게 된다 이런 경우 의존성을 코드에 명시하게 되면 클라이언트와 의존성이 강하게 결합된다 유연하지 않은 코드가 되며 테스트도 어려워진다 정적 유틸리티를 잘못 사용한 예제이다 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... } } 싱글턴을..
-
item 4 인스턴스화를 막으려거든 private 생성자를 사용하라책/이펙티브 자바 2022. 2. 14. 18:10
ITEM 4 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드와 정저 필드만이 있는 클래스가 있다 인스턴스를 생성하지 못하게 해야되는 클래스가 필요한 경우가 있다 ex) 배열 관련 메서드를 모아놓은 클래스 java.util.Arrays public class Arrays { private static final int MIN_ARRAY_SORT_GRAN = 1 toIndex) { throw new IllegalArgumentException( "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); } if (fromIndex < 0) { throw new ArrayIndexOutOfBoundsException(fromIndex); } ..
-
item 3 private 생성자나 열거 타입으로 싱글턴임을 보증하라책/이펙티브 자바 2022. 2. 11. 22:17
ITEM 3 private 생성자나 열거타입으로 싱글턴임을 보증하라 싱글턴 인스턴스를 오직 하나만 생성할 수 있는 클래스 함수와 같은 무상태 객체, 유일해야 하는 시스템 컴포넌트 등 mock 구현이 안되기 때문에 클라이언트 테스트가 어려울수있다 장점 객체를 한번만 생성 후 재사용 하기 때문에 메모리 낭비를 방지할 수 있고 다른 객체와 공유도 가능하다단점 인터페이스로 만든 후 해당 인터페이스를 구현한 싱글턴이 아니면 mock 구현이 안되기 때문에 클라이언트 테스트가 어렵다 싱글턴 생성 방식 public static final 필드 public class Foo { public static final Foo INSTANCE = new Foo(); private Foo() {} public void getPr..
-
item 2 생성자에 매개변수가 많다면 빌더를 고려하라책/이펙티브 자바 2022. 2. 10. 20:47
ITEM 2 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리 패턴과 생성자는 매개변수가 많을 때 가독성이 떨어지게 된다 이럴때 점층적 생성자 패턴, 자바 빈즈 패턴, 빌더 패턴을 사용해보자 점층적 생성자 패턴 public class Foo { private String userName; //필수값 private int age; //필수값 private String address; //필수값 private String tel; //선택값 public Foo(String userName) { this.userName = userName; } public Foo(String userName, int age) { this.userName = userName; this.age = age; } public ..
-
item 1 생성자 대신 정적 팩터리 메서드를 고려하라책/이펙티브 자바 2022. 2. 9. 23:40
ITEM 1 생성자 대신 정적 팩터리 메서드를 고려하라. 생성자를 이용하여 객체 생성 public class Foo { private String name; public Foo(String name) { this.name = name; } } 위와 같이 생성자를 통해 객체를 생성 하는 경우 아래와 같이 호출부에서 이 객체의 역할을 알기가 힘들다 public static void main(String[] args) { Foo foo1 = new Foo("hong"); } 생성자의 개수가 더 많아진다면 ? public class Foo { private String name; private int age; public Foo(String name) { this.name = name; } public Foo(..