Item 6 - 불필요한 객체 생성을 피하라
객체의 재사용 똑같은 기능의 객체를 매번 생성하는 것보다 객체 하나를 재사용하는 편이 나을 때가 많다. 생성자 대신 정적 팩터리 메서드를 사용하여 불필요한 객체 생성을 피할 수 있다. ex) Boolean(String) 대신 Boolean.valueOf(String) 생성 비용이 아주 비싼 객체일 경우 String.matche...
객체의 재사용 똑같은 기능의 객체를 매번 생성하는 것보다 객체 하나를 재사용하는 편이 나을 때가 많다. 생성자 대신 정적 팩터리 메서드를 사용하여 불필요한 객체 생성을 피할 수 있다. ex) Boolean(String) 대신 Boolean.valueOf(String) 생성 비용이 아주 비싼 객체일 경우 String.matche...
클래스가 하나 이상의 자원에 의존할 때 - 맞춤법 검사기 예시 정적 유틸리티 클래스로 구현하는 경우 // 정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다. public class SpellChecker { private static final Lexicon dictionary = ...; // 사전에 의존 pr...
정적 멤버만 담은 유틸리티 클래스 정적 메서드와 정적 필드만을 담은 클래스 java.lang.Math, java.util.Arrays, java.util.Collections final 클래스와 관련한 메서드를 모아놓을 때도 사용한다. 유틸성 클래스 예시 java.lang.Math public final class Math { ...
싱글턴(Singleton)이란? 인스턴스를 오직 하나만 생성할 수 있는 클래스 무상태 객체, 설계상 유일해야 하는 시스템 컴포넌트, DBCP(DataBase Connection Pool) 등 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워진다. 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할...
Item2 - 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리 메서드와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다. 🤦♀️ 이러한 제약의 대안으로 프로그래머들은 다음과 같은 방법을 사용했다. 점층적 생성자 패턴 자바 빈즈 패턴 빌더 패턴 (1) 점층적 생성자 패턴 (확장의 어려움) public c...
정적 팩터리 메서드의 장점 👍 (1) 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으론 반환될 객체의 특성을 제대로 설명하지 못한다. 반면, 정적 팩터리 메서드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. [생성자] : BigInteger(int, int, Random) [정적 팩터리 메서드]...
Serializable을 구현하는 순간, 생성자 이외의 방법으로 인스턴스를 생성할 수 있게 된다. 이전 아이템에서도 계속 언급되지만, 버그와 보안 문제가 일어날 가능성이 커진다. 하지만 직렬화 프록시 패턴을 사용하면 이 위험을 크게 줄일 수 있다. 직렬화 프록시 패턴 public final class Period implements Serial...
싱글턴 패턴과 직렬화 진짜 싱글턴일까? ,,, No(🙅) public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuilding() { ... } } 이 클래...
readObject 메서드 ObjectInputStream / ObjectOutputStream 를 통해 객체를 파일에 읽고 쓴다. 이 클래스에 포함된 메서드가 readObject() / writeObject()이다. 클래스에 readObject() / writeObject() 가 정의되어 있다면, 기본 직렬화 과정에서 이 메서드를 통해 ...
클래스가 Serializable을 구현하고 기본 직렬화 형태를 사용한다면 다음 릴리스 때 버리려 한 현재의 구현에 발이 묶이게 된다. 먼저 고민해보고 괜찮다고 판단될 때만 기본 직렬화 형태를 사용하라. 기본 직렬화 형태는 유연성, 성능, 정확성 측면에서 신중히 고민한 후 합당할 때만 사용해야 한다. 객체의 물리...