매개변수가 유효한지 검사하라
매개변수 validate 를 하지 않으면
Runtime 시에나 에러가 발생할수있다.
유효성 검사방법
Null
자바 7 부터는 Objects.requireNonNull 로 Null 검사를 쉽게 할 수 있다.
자바 9 부터는
Objects 의 checkFromIndexSize, checkFromToIndex, checkIndex 같은 메서드를 이용해
범위 검사도 할 수 있다.
assert 사용
private 메서드라면 assert 를 사용하여 유효성 검사를 할 수 있다.
조건식을 만족하지 않으면 AssertionError 가 발생한다.
적시에 방어적 복사본을 만들라.
Date 는 가변 매개변수다.
클래스가 클라이언트로부터 받는 매개변수가 가변이라면
반드시 방어적으로 복사를 해야한다.
만약 저 코드에서 방어적 복사하는 new Date() 가 없다면
endDate 를 참조하고 있는 값을 변경하게 되면
Dog 에 있는 endDate도 변경이 될것이다.
이걸 막아주기 위해서 생성자에 매개변수로 받은 값을 담고있는 새로운 객체를 만들어야한다.
-> 성능 저하가 있을 수 있다.
메시지 시그니처를 신중히 설계하라.
- 메서드의 이름은 신중하게 짓자.
- 편의 메서드를 너무 많이 만들지 말자
너무 많은 메서드는 테스트, 유지보수의 힘이 들게 된다.
- 매개변수를 4개 이상은 자제하자
매개변수를 줄일 수 있는 방법
1. 여러 메서드로 나눠본다.
2. 매개 변수를 묶어주는 도우미 메서드를 만든다.
3. 빌더 패턴을 사용한다.
- 매개변수 타입 에는 클래스 보다는 인터페이스를 사용하는게 좋다.
ex. HashMap(X) , Map (O)
메서드, 생성자의 다중정의는 신중하게 해야 한다.
다중정의는 혼란을 일으킬수있다.
메서드 이름을 다르게 정의해주는게 좋다.
listName(List<?> s) 와 같이..
생성자에서는 이름을 다르게 할 수 없으니
정적 팩토리를 사용해주는게 좋다.
- 매개변수의 수가 같다면 오버로딩 보다는 따로 생성하는게 좋다
가변인수는 신중히 사용하라.
가변인수는 성능에 문제가 있을 수 있다.
가변인수 메서드가 호출될 때마다 배열을 새로 할당하고 초기화하기 때문이다.
책에서는 매개변수가 3개 이하가 95% 라고 한다.
따라서 이런식으로 다중정의를 해서 사용을 할 수 있다.
null이 아닌, 빈 컬렉션이나 배열을 반환하라
리턴 값이 null 이면 클라이언트에서는 null 을 방어하는 코드를 추가해야한다.
null 반환과 빈 컨테이너 반환은 성능 차이는 없다싶이 하기 때문에
빈컬렉션을 반환하는게 좋다.
null 보다는 빈 컬렉션을 반환해라
옵셔널 반환은 신중히 하라.
Optional 은 최대 1개 가질 수 있는 불변 컬렉션이다.
null-safe 한 코드를 작성할 수 있고 활용도가 좋다.
- 기본값을 설정할 수 있고
- 원하는 예외를 던질 수 있다.
하지만, 성능에 너무 민감한 곳에서는 Optional 을 사용하지 말자.
공개된 API 요소에는 항상 문서화 주석을 작성하라.
public 클래스, 인터페이스 , 메서드, 필드 선언에 doc 주석을 달아야한다.
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - 10장 예외 (0) | 2020.12.30 |
---|---|
이펙티브 자바 - 9장 일반적인 프로그래밍 원칙 (0) | 2020.12.29 |
이펙티브 자바 - 7장 람다와 스트림 (0) | 2020.12.29 |
이펙티브 자바 - 6장 열거타입과 애너테이션 (0) | 2020.12.24 |
이펙티브 자바 - 5장 제네릭 (0) | 2020.12.23 |