effectivejava (4) 썸네일형 리스트형 [Effecive Java] item4. 인스턴스화를 막으려거든 private 생성자를 사용하라 1. 정적 메서드와 정적 필드만을 담은 클래스기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있다. ex) java.lang.Math , java.util.Arrays특정 인터페이스를 구현하는 객체를 생성해 주는 정적 메서드(혹은 팩터리)를 모아놓을 수도 있다. ex) java.util.Collectionsfinal 클래스와 관련한 메서드들을 모아놓을 때도 사용한다. 2. 인스턴스화를 막으려거든 private 생성자를 사용하라정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다.문제점 : 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 즉, 매개변수를 받지 않는 public 생성자가 만들어지며, 사용자는 생성자가 자동 생성된 것인지 구분할 수 없다.해결.. [Effective Java] item3. private 생성자나 열거 타입으로 싱글턴임을 보장하라 1. 싱글턴 (singleton) 이란?인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다.함수와 같은 무상태(stateless) 객체설계상 유일해야 하는 시스템 컴포넌트클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다.2. 싱글턴을 만드는 첫 번째 방법 ) public static 멤버가 final 필드인 방식private 생성자는 public static final 필드를 초기화할 때 딱 한 번만 호출된다.클래스가 초기화될 때 만들어진 인스턴스가 전체 시스템에서 하나뿐임이 보장된다.예외 : 권한이 있는 클라이언트는 리플렉션 API인 AccessibleObject.setAccessible을 사용해 private 생성자를 호출할 수 있다.해결방안 : 생성자를 두 번 .. [Effective Java] item2. 생성자에 매개변수가 많다면 빌더를 고려하라 제약정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 제약이 있다. 방법 1. 점층적 생성자 패턴 (telescoping constructor pattern)이 클래스의 인스턴스를 만들려면 원하는 매개변수를 모두 포함한 생성자 중 가장 짧은 것을 골라 호출하면 된다. 관련 깃허브 코드 : https://github.com/2Smean/ReadingBook/blob/main/src/main/java/Chap2_GenerateObjectAndDestory/item2/telescopingconstructor/NutritionFacts.java 장점생성자가 호출되는 시점에 객체가 유효한 상태를 가질 수 있다. 단점매개변수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다. 확장하기 어.. [Effective Java] item1. 생성자 대신 정적 팩터리 메서드를 고려하라 1. 정적 팩터리 메서드가 생성자보다 좋은 장점i. 이름을 가질 수 있다.생성자 : BigInteger(int , int, Random) | 정적 팩터리 : BigInteger.probablePrime정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다.생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 설명하지 못한다.하나의 시그니처로는 생성자를 하나만 만들 수 있다.이름을 가질 수 있는 정적 팩터리 메서드에는 이런 제약이 없다. ii. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다.불변 클래스(immutable class)인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체(생성 비용이 큰) 생성을 피할 수 있다... 이전 1 다음