Chapter8 메서드
1. 매개변수가 유효한지 검사하라
- 메서드를 검사하여 원자성을 지켜야 한다.
public
메서드가 아니면assert
를 사용하여 매개변수의 유효성을 검증할 수 있다.(javaf를 실행할 때-ea
플래그를 설정해주어어 함)- 단, 런타임에는 아무런 영향도 주지 않는다.
2. 적시에 방어적 복사본을 만들라
- 클래스가 클라이언트로 반환하거나, 받는 요소가 가변이라면 방어적으로 복사하여 원래 요소를 불변상태로 만들어야 한다.
3. 메서드 시그니처를 신중히 설계하라
메서드 이름을 신중히 지어야 한다.
편의 메서드를 너무 많이 만들지 마라.
매개변수 목록은 짧게 유지하자.
- 방법
- 여러 메서드로 쪼갠다.
- 매개변수를 여러개 묶어주는 도우미 클래스를 생성한다.
- 빌더 패턴을 메서드 호출에 사용한다. → 매개변수가 많고, 그 일부를 생략할 수 있을때 사용
- 방법
매개변수 타입으로는 인터페이스가 클래스보다 낫다.
이름이 명확하지 않은 boolean 타입보다는 2개를 원소를 가지는 열거 타입이 더 낫다.
boolean temperatureScale = true; boolean temperatureScale = false; public enum TemperatureScale { FAHRENHEIT, CELSIUS}
4. 다중정의는 신중히 사용하라
- 안전하고 보수적으로 프로그램을 짜려면 매개변수 수가 같은 다중정의(오버로딩)는 만들지 말자.
- 필요하다면 메서드 이름을 다르게 해주는것이 좋다.
5. 가변인수는 신중히 사용하라
- 가변인수는 인수 개수가 정해지지 않았을 때 사용하기 좋다
- 0개 이상의 인수를 가변인수로 대체할 수 있다.
- 만약 1개가 꼭 필요한 인수라고 하면, 1개의 인수를 매개변수로 설정해주고, 나머지를 가변인수로 설정해주면 된다.
- 가변인수는 메서드가 호출될 때마다 배열을 새로 하나 할당하고 초기화하므로 성능이슈가 생길수 있으므로 신중하게 사용해야 한다.
6. null이 아닌, 빈 컬렉션이나 배열을 반환하라
- 컬렉션이나 컨테이너가 비었을때 null을 반환하는 메서드를 사용하면,
Exception
이 발생하지 않게 방어코드가 필요하다.- 따라서 빈 컬렉션이나, 길이가 0인 배열을 반환해야 한다.
Collections.emptySet
,Collections.emptyList
,Collections.emptyMap
,new Integer[0]
7. 옵셔널 반환은 신중히 하라
- 옵셔널은 null로이 발생하면 빈 객체를 만들어
NullPointerException
이 발생할 가능성을 낮춰 준다. - 컬렉션, 스트림, 배열, 옵셔널 같은 컨테이너 타입을 옵셔널로 감싸면 안되고 빈 객체를 생성해서 반환하는게 더 낫다.
- 옵셔널을 사용하면 성능 저하가 뒤따를수 있으므로, 성능에 민감한 상황이라면 null을 반환하거나 예외를 던지는게 나을수도 있다.
8. 공개된 API 요소에는 항상 문서화 주석을 작성하라
※ 참고
- 이펙티브 자바 - 조슈아 블로크
'BOOK > [이펙티브 자바]' 카테고리의 다른 글
[Effective Java] Chapter7 람다와 스트림 (0) | 2022.03.17 |
---|---|
[Effective Java] Chapter6 열거 타입과 애너테이션 (0) | 2022.03.15 |
[Effective Java] Chapter5 제네릭 (0) | 2022.02.15 |
[Effective Java] Chapter4 클래스와 인터페이스 (0) | 2022.02.10 |
[Effective Java] Chapter3 모든 객체의 공통 메서드 (0) | 2022.02.08 |