아이템 6 - 불필요한 객체 생성을 피하라불필요한 객체 생성을 피하는 것은 메모리 효율성과 성능을 향상시키는 데 중요한 포인트다.String 객체 비교 예시String 리터럴 비교String str1 = "abc";String str2 = "abc";System.out.println(str1 == str2); // trueSystem.out.println(str1.equals(str2)); // true두 문자열은 String Constant Pool에 저장되며, 같은 리터럴이기 때문에 동일한 객체를 참조한다. 따라서 ==로 비교해도 true가 나오고, equals 메서드로 비교해도 true다.new 키워드로 생성한 StringString str1 = "abc";String str2 = ne..
자바심화
아이템 5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식인 의존 객체 주입 방식을사용해야한다.예를 들어 unitPrice * usage를 통한 최종 금액에서, 할인율 20%(소수점 내림)를 적용하려고 한다. 아래처럼 코드를 만들 수 있다.@Overridepublic long calculateEachCharge(CityGasUser user) { long unitPrice = user.getUnitPrice(); long usage = user.getUsage(); return unitPrice * usage * 80 / 1..
아이템 4 인스턴스화를 막으려거든 private 생성자를 사용하라인스턴스화를 막으려면 private 생성자를 사용하여 클래스 외부에서 객체를 생성하지 못하도록 제한할 수 있다. 이를 통해 클래스의 유일한 인스턴스 또는 정적 메서드를 통해서만 객체에 접근하도록 유도할 수 있다.싱글턴 패턴public class DatabaseConnection { // 유일한 인스턴스를 저장할 정적 변수 private static final DatabaseConnection INSTANCE = new DatabaseConnection(); // private 생성자: 외부에서 인스턴스를 생성할 수 없도록 함 private DatabaseConnection() { // 초기화 코드 }..
아이템 3 private 생성자나 열거 타입으로 싱글턴임을 보증하라싱글턴(Singleton) = 인스턴스를 오직 하나만 생성할 수 있는 클래스필드로 선언된 정적 인스턴스public class Elvis { public static final Elvis INSTANCE = new Elvis(); // 정적 필드로 유일한 인스턴스를 선언 private Elvis() { } // 생성자는 private로 설정 public void leaveTheBuilding() { System.out.println("Whoa baby, I'm outta here!"); } public static void main(String[] args) { Elvis elvis = E..
아이템 2 생성자에 매개변수가 많다면 빌더를 고려하라정적 팩터리와 생성자에는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 공통제약이 있다.보통 클래스용 생성자 혹은 정적 팩터리는 점층적 생성자 패턴, 자바빈즈 패턴 등을 사용하였다.점층적 생성자 패턴 (Telescoping Constructor Pattern)점층적 생성자 패턴은 여러 개의 생성자 오버로드를 사용하여 다양한 초기화 방법을 제공하는 패턴이다.public class NutritionFacts { private final int servingSize; // 필수 private final int servings; // 필수 private final int calories; // 선택 private fi..
아이템 1 생성자 대신 정적 팩터리 메서드를 고려하라정적 팩터리 메서드 = 객체의 생성을 담당하는 클래스 메서드public class Car { private String model; // private 생성자 private Car(String model) { this.model = model; } // 정적 팩터리 메서드 public static Car create(String model) { return new Car(model); } public String getModel() { return model; }}public class Main { public static void main(..