이펙티브 자바

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 36. 비트 필드 대신 EnumSet을 사용하라 비트 필드 열거 상수 열거한 값들이 주로 (단독이 아닌) 집합으로 사용될 경우, 예전에는 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴을 사용해왔다. ex1) 비트 필드 열거 상수 (예전 기법) public class Text { public static final int STYLE_BOLD = 1
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라 ordinal 메서드 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째인지 위치를 반환하는 ordinal 메서드를 제공한다. 위의 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal 메서드를 이용할 수 있는데 결론적으로 이는 위험하다. ex1) ordinal을 잘못 사용한 코드 public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public in..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 34. int 상수 대신 열거 타입을 사용하라 열거타입 일정 개수의 상수 값을 정의하고 그 외의 값은 허용하지 않는 타입 ex) 사계절, 태양계의 행성 등 ex 1) 정수 열거 패턴 (취약한 코드) 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 fi..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 33. 타입 안전 이종 컨테이너를 고려하라 제네릭 Set, Map 등의 컬렉션과 ThreadLocal, AtomicReference 등의 단일원소 컨테이너에도 흔히 쓰인다. 이런 모든 쓰임에서 매개변수화되는 대상은 원소가 아닌 컨테이너 자신이다며 하나의 컨테이너에서 매개변수화 할 수 있는 타입의 수가 제한된다. 예컨데 Set에는 원소의 타입을 뜻하는 단 하나의 타입 매개변수만 있으면 되며, Map에는 키와 값의 타입을 뜻하는 2개만 필요한 식이다. 타입 안전 이종 컨테이너 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공하면 된다. 제네릭 타입 시스템이 값의..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 30. 이왕이면 제네릭 메서드로 만들라 제네릭 메서드 클래스와 마찬가지로 메서드도 제네릭으로 만들 수 있다. 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. ex 1) 두 집합의 합집합을 반환하는 코드(문제 발생) public static Set union(Set s1, Set s2) { Set result = new HashSet(); result.addAll(s2); return result; } 위의 코드는 컴파일은 되지만 경고가 2개 발생한다. 경고를 없애려면 이 메서드를 타입 안전하게 만들어야 한다. 메서드 선언에서의 세 집합(입력 2개, 반환 1걔)의 원소타입을 타입 매개변수로 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 28. 배열보다는 리스트를 사용하라 배열 vs 제네릭타입 1. 공변 / 불공변 배열은 공변이다.(함께 변한다) 즉, Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다. 제네릭은 불공변이다. 즉 서로 다른 타입 Type1과 Type2가 있을 때, List은 List의 하위타입도 상위타입도 아니다. ex 1) 배열과 리스트의 차이 1 // 배열에 넣기 Object[] objectArray = new Long[1]; objectArray[0] = "Long에 문자열 넣기"; // 런타임 시 ArrayStoreException 발생 // 리스트에 넣기 List obje..
멍목
'이펙티브 자바' 태그의 글 목록