JAVA/이펙티브 자바 3 4

2장 아이템6 - 불필요한 객체 생성을 피하라

기존 객체를 재사용해야 한다면 새로운 객체를 만들지 말것 단, 방어적 복사(불필요한 객체 생성을 하지 않음)에 실패하면 언제 터져 나올지 모르는 버그와 보안 구멍으로 이어 지지만,불필요한 객체 생성은 그저 코드 형태와 성능에만 영향을 준다. String 예시 아래 코드가 반복문이나 자주 호출되는 메서드 내에 있으면 쓸데없는 String 인스턴스 수가 만들어진다. String s = new Strin("test"); 위 코드를 개선 String s = "test"; Boolean 예시 Boolean a = new Boolean("true"); // 팩터리 메서드로 객체를 재사용한다 Boolean b = Boolean.valueOf("true"); 위와 비슷한 코드로 Long도 있으니, 직접 확인해본다. 정..

2장 아이템2 - 생성자에 매개변수가 많다면 빌더를 고려하라

핵심 정리 생성자나 정적팩터리가 처리해야할 매개변수가 많다면 빌더 패턴을 선택하는게좋다. 매개변수 중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다. 빌더는 점층적 생성자 보다 클라이언트 코드를 읽고 쓰기가 훨씬 간결하고, 자바빈즈보다 월씬 안전하다. 점층적 생성자 패턴 (Telescoping Constructor Pattern) 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다 public class NutntionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; public NutntionFacts(int serving..

1장 - 용어 정리

자바가 지원하는 타입(Type) : 자료형 참조 타입 (reference type) : 객체 interface : 인터페이스 class : 클래스 array : 배열 primitive : 기본타입 annotation : 인터페이스의 일종 enum : 열거 타입, 클래스의 일종 클래스의 멤버 field method member class member interface 메서드 시그니처 메서드 이름과 입력 매개변수(parameter)의 타입으로 이뤄지며, 반환값의 타입은 시그니처에 포함되지 않는다. implement : 클래스가 인터페이스를 구현한다 extend : 클래스(인터페이스)가 다른 클래스(인터페이스)를 확장한다. 공개 API (exported API) : API(Application Programm..

2장 아이템1 - 생성자 대신 정적 팩터리 메서드를 고려하라

핵심 정리 정적 팩터리 메서드와 public생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이 해하고 사용하는 것이 좋다. 그렇다고 하더라도 정적 팩터리를 사용하는 게 유리한 경우 가 더 많으므로 무작정 publk 생성자를 제공하던 습관이 있다면 고치자 정적 팩터리 메서드 예제 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 장점 고유한 이름을 가질수 있다. 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. 호출될 때마다 새로운 인스턴스를 생성하지 않아도 된다. 불필요한 객체 생성을 피할 수 있다. 이 덕분에 불변 클래스(immutable class)는 인스턴스를 미리 만들어 놓거나 새로..