Java

Effective Java 제 8장 - 메서드

iksadnorth 2023. 8. 22. 23:06

해당 게시물은 책 'Effective Java'를 참고하고 작성했습니다.

매개변수 유효성 검사를 필히 진행하라!
메서드에 입력된 값은 때때로 null인지, 양수인지, 허용한 범위 내에 있는지 등등을 검사해야 한다.
이 때, java 7부터 추가된 requireNonNull, checkFromToIndex 등등을 사용하면
1줄로 검사가 끝나기도 하고 의미도 명확해 굳이 주석을 달지 않아도 된다.

내부 데이터를 보호하기 위해 복사 객체를 내놓기도 해야 한다!
만약 특정 객체의 속성을 final로 설정한다해도 해당 속성이 만약 List와 같이 
내부 요소를 맘대로 수정할 수 있다면 악의적인 사용자 혹은 실수로 인해 
변경된 값을 가질 수도 있다. 때문에 readonly로만 속성값을 출력하고 싶다면
진짜 속성값을 주는 것이 아니라 해당 속성값의 복사본을 Return하면 된다.
물론 복사 비용이 크면 이를 포기할 줄도 알아야 한다.

메서드 시그니처[메서드명, 매개변수 타입, 매개변수 갯수]를 신중히 설계하라!
이는 차후 큰 문제를 야기할 수 있으므로 신중하게 설계해야 한다.
1. 메서드명은 명확하게, 일관되게 짓기. - 가독성
2. 편의 메서드를 너무 많이 만들지 않기. - 쉬운 유지보수를 위해
3. 매개변수 갯수는 4개 이하로만 만들기. - 가독성
4. 매개변수 타입은 되도록 인터페이스로 짓기 - DIP
5. boolean보다 Enum을 사용하기 - 가독성

Overload 보다 되도록 다른 메서드 시그니처를 사용하자!
다중 정의는 가독성도 떨어지고 설계 의도대로
작동하지 않을수도 있으니 지양하자.

Collection을 반환할 때, Null보다 빈 Collection을 반환하라!
만약 List<String> 같은 값을 Return할 때, 
반환할 값이 없다고 해서 Null을 내놓지 말고 차라리 List.of()를 내놓아라.
왜냐면, null은 사용전에 null체크를 해야 하기에 성능이 떨어지게 된다.
Optional을 사용하는 이유와 일맥상통한다.