[Effective Java 3/E] ITEM 34. int 상수 대신 열거 타입을 사용하라 열거(이하 Enum) 타입이 도입되기 전에는 상수를 정의할 때에는 정수 열거 패턴(int enum pattern)을 사용했다. //DO NOT public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1; public static final int ORANGE_BLOOD = 2; 쓰지 말아야 할 이유 이 정수 열거 패턴은 type safe를 보장할 수 없다.(APPLE_FUJI==ORAN..
[Effective Java 3/E] 3장 모든 객체의 공통 메서드 ITEM 10. equals는 일반 규약을 지켜 재정의 하라 기본 object를 상속하고 equals를 override 하지 않은 경우에는, Object의 equals를 상속하고 객체 식별성을 기준으로 판단한다. String s1 = new String("a"); String s2 = new String("a"); s1 == s2; // false. 두 객체는 같은 "a"라는 문자열을 담고 있는 클래스지만 // 각각 다른 인스턴스다. s1.equals(s2); // true. 다른 객체지만 의미가 같으므로 논리적 동치성. 아래 규칙 중 단 하나라도 만족하면 재정의 하지 않도록 하자. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 게 아닌 동작하는 개체를 표현한다. thread는 equals가 성립할 ..
[Effective Java 3/E] 2장 객체 생성과 파괴 ITEM 1 Consider Static Factory Methods Static factory method(정적 팩터리 메서드) 생성자 없이 메서드를 통해 객체를 생성하는 것 ! : 디자인 패턴에서 일치하는 패턴은 없다. 책의 고유한 패턴. //example : valueOf in Boolean box class public static Boolean valueOf(boolean b){ return b ? Boolea.TRUE : Boolean.FALSE; } Advantages 생성자와 다르게 이름을 가질 수 있다. 생성자의 파라미터로는 반환될 객체의 특성을 코드 작성자가 알기 힘들다. 그러나 정적 팩터리 메서드는 이름을 잘 지어놓으면 코드를 읽는 사람이 반환될 객체의 특성을 쉽게 이해할 수 있다. ..
[Effective Java 3/E] 1장 들어가기 책을 관통하는 키워드 - Clarity(명료성) Simplicity(단순성) Component는 사용자를 놀래게 하는 동작을 해서는 안된다. Component는 가능한 한 작되, 너무 작아서도 안된다. 코드는 복사되는 게 아니라 재사용되어야 한다. Component 사이의 의존성은 최소로 유지해야한다. 오류는 만들어지자 마자 가능한 빨리(물론 Compile 타임에 잡는게 베스트!) 잡아야 한다. 규칙을 어길 때는 합당한 이유가 있어야 한다. 단어정리 Component : method부터 framework까지 재사용 가능한 모든 소프트웨어 요소 Java의 자료형은 Interface(+annotation), Class(+enum), Array, Primitive Class의 멤버들은 Field, Method..