IT321 이펙티브 자바 8장 - 메서드 매개변수가 유효한지 검사하라 매개변수 검사를 제대로 하지 못하면 원자성을 어기는 결과를 낳을 수 있다. 그렇기에 던지는 예외를 자바독 태그를 이용하여 문서화 시켜야 한다. java.util.Object.requireNonNull 메서드는 유연하고 사용하기도 편하기에 수동으로 null 검사를 하지 않아도 된다. 메서드는 최대한 범용적으로 설계하나 머서드가 건네받은 값으로 무언가 제대로 된 일을 할 수 있다면 매개변수 제약은 적게 만드는 것이 좋다. 적시에 방어적 복사본을 만들라 package effectivejava.chapter8.item50; import java.util.*; // 코드 50-1 기간을 표현하는 클래스 - 불변식을 지키지 못했다. (302-305쪽) public final class .. 2020. 1. 6. 이펙티브 자바 - 7장 람다와 스트림 익명 클래스보다는 람다를 사용하라 타입을 명시해야 코드가 더 명확 할 때만을 제외하고는 람다의 모든 매개변수 타입은 생략해야한다. 이후 컴파일러가 "타입을 알 수 없다" 라는 오류를 낼 경우에만 해당 타입을 명시하면 된다. 람다의 단점은 이름이 없으며 문서화를 하지 못하기에 코드 자체로 동작이 명확히 설명되지 않거나 코드줄 수가 많아 지는 경우에는 람다를 사용하지 말아야 한다. (세줄이 넘어가면 사용하지 않는 것이 좋다) 람다는 자신을 참조 할 수 없기때문에 람다에서 this 키워드는 바깥 인스턴스를 가리키며, 익명에서의 this는 익명 클래스의 인스턴스 this를 가르킨다. 익명 클래스는 함수형 인터페이스가 아닌 타입의 인스턴스를 만들때 만 사용하는 것이 좋다. 람다보다는 메서드 참조를 사용하라 메서드.. 2020. 1. 3. 이펙티브 자바 6장 - enum 2 명명 패턴보다 애너테이션을 사용하라 명명 패턴은 효과적인 방법이지만 단점을 가지고 있다. 첫째, 오타에 대한 주의가 필요하다. 둘째, 올바른 프로그램 요소에서만 사용된다는 보증할 방법이 존재하지 않는다. 셋째, 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다. 마킹 에너테이션 : @Test 애너테이션과 같은 애너테이션은 아무 매개변수 없이 단순히 대상에 마킹하는 것을 가리킨다. 자바 8에서는 여러 개의 값을 받는 애너테이션을 다른 방식으로도 만들수 있다. 배열 매개변수를 사용하는 대신 애너테이션에 @Repeatable 메타애너테이션을 다는 방식이며, @Repeatable을 단 애너테이션은 하나의 프로그램 요소에 여러번 달 수 있다. 하지만 주의할 점이 있다. 첫번째, @Repeatable을 단 애너.. 2020. 1. 3. 이펙티브 자바 6장 - enum int 상수 대신 열거 타입을 사용하라 열거 타입 자체는 클래스이며 상수 하나당 자신의 인스턴스를 하나씩 만들어 public static final 필드로 공개하며 열거 타입은 밖에서 접근 할 수 있는 생성자를 제공하지 않으므로 final이다. 인스턴스를 직접 확장하거나 생성할 수 없으므로 하나씩만 존재하는 것ㅇ이 보장된다. 열거 타입은 근본적으로 불변이기에 모든 필드는 final이여야한다. 기존 열거 타입에 상수별 동작을 혼합해 넣는 경우 switch문을 사용하는 것이 좋다. 사용시기 필요한 원소를 컴파일 타임에 다 알 수 있는 상수 집합이라면 항상 열거 타입을 사용하며, 열거 타입에 정의된 상수 개수가 영원히 고정 불변일 필요는 없다. ordianl 메서드 대신 인스턴스 필드를 사용 열거 타입 상수에.. 2019. 12. 12. 이전 1 ··· 32 33 34 35 36 37 38 ··· 81 다음