본문 바로가기

IT/Java64

이펙티브 자바 6장 - enum 2 명명 패턴보다 애너테이션을 사용하라 명명 패턴은 효과적인 방법이지만 단점을 가지고 있다. 첫째, 오타에 대한 주의가 필요하다. 둘째, 올바른 프로그램 요소에서만 사용된다는 보증할 방법이 존재하지 않는다. 셋째, 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다. 마킹 에너테이션 : @Test 애너테이션과 같은 애너테이션은 아무 매개변수 없이 단순히 대상에 마킹하는 것을 가리킨다. 자바 8에서는 여러 개의 값을 받는 애너테이션을 다른 방식으로도 만들수 있다. 배열 매개변수를 사용하는 대신 애너테이션에 @Repeatable 메타애너테이션을 다는 방식이며, @Repeatable을 단 애너테이션은 하나의 프로그램 요소에 여러번 달 수 있다. 하지만 주의할 점이 있다. 첫번째, @Repeatable을 단 애너.. 2020. 1. 3.
이펙티브 자바 6장 - enum int 상수 대신 열거 타입을 사용하라 열거 타입 자체는 클래스이며 상수 하나당 자신의 인스턴스를 하나씩 만들어 public static final 필드로 공개하며 열거 타입은 밖에서 접근 할 수 있는 생성자를 제공하지 않으므로 final이다. 인스턴스를 직접 확장하거나 생성할 수 없으므로 하나씩만 존재하는 것ㅇ이 보장된다. 열거 타입은 근본적으로 불변이기에 모든 필드는 final이여야한다. 기존 열거 타입에 상수별 동작을 혼합해 넣는 경우 switch문을 사용하는 것이 좋다. 사용시기 필요한 원소를 컴파일 타임에 다 알 수 있는 상수 집합이라면 항상 열거 타입을 사용하며, 열거 타입에 정의된 상수 개수가 영원히 고정 불변일 필요는 없다. ordianl 메서드 대신 인스턴스 필드를 사용 열거 타입 상수에.. 2019. 12. 12.
이펙티브 자바 5장 - 제네릭 2 이왕이면 제네릭 메서드로 만들라 메서드 역시 제네릭으로 만들 수 있으며 클라이언트에서 입력 매개 변수와 반환값을 명시적으로 형변환해야하는 메서드보다 안전하며 사용하기도 쉽다. 재귀적 한정 타입 : 자기 자신이 들어간 표현식을 사용하여 타입 메개변수의 허용범위를 정하는 것 한정적 와일드 카드를 사용해 API 유연성을 높여라 유연성을 극대화하려면 원소의 생산자나 소비자용 입력 매개변수에 와일드카드 타입을 사용하게되면 API가 유연해진다. 와일드 카드 공식 펙스 (PECS) : 매개변수화 타입 T가 생산자라면 2019. 12. 5.
이펙티브 자바 5장 제네릭 : 컬렉션이 담을 수 있는 타입을 컴파일러에게 알려주기에 컴파일러가 스스로 형변환 코드를 추가할 수 있으며, 다른 타입의 객체를 넣으려는 시도를 차단하여 안전하고 명확한 프로그램을 만들 수 있다. 제네릭 타입 : 제네릭 클래스와 제네릭 인터페이스를 통틀어 부르는 말이며 클래스와 인터페이스 선언에 타입 매개 변수를 사용하면 이를 제네릭 클래스, 제네릭 인터페이스라 한다. 로타입은 사용하지 말라 로타입 : 제네릭 타입에서 매개변수를 전혀 사용하지 않는 것을 말한다. 로 타입을 사용하면 제네릭이 주는 안전성과 표현력을 버리게 되는 것이며 이 타입은 호환성을 위해 만들어 놓은 것이기에 사용하지 않아야 한다. 와일드 카드와 비교 했을 시에도 와일드 카드는 null이외에는 어떤 원소도 넣을 수 없게 되며 안.. 2019. 12. 3.