Hyun's Wonderwall

[Java] 이펙티브 자바 - 8장(2/2), 9장(1/2) (아이템 55-63) 본문

Study/Java

[Java] 이펙티브 자바 - 8장(2/2), 9장(1/2) (아이템 55-63)

Hyun_! 2025. 8. 30. 19:59

8장 메서드

아이템 55. 옵셔널 반환은 신중히 하라

감나옵셔널은 예외 검사와 취지가 비슷. 결과가 없을 수 있으며, 클라이언트가 이 상황을 특별하게 처리해야 할 때 사용한다.

반환값 이외의 용도로 쓰는 경우는 드물다.

Stream<Optional<T>>. Optional의 stream().

컨테이너 타입은 옵셔널로 감싸면 안 된다. 빈 List<T>를 반환하는 게 좋다.

옵셔널 반환에는 성능 저하가 뒤따라, 성능에 민감한 메서드라면 null을 반환하거나 예외를 던지는 게 나을 수 있다.


아이템 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라

API를 올바르게 문서화하려면 공개된 모든 클래스, 인터페이스, 메서드, 필드 선언에 문서화 주석을 ㅏㄷㄹ아야 한다.

메서드용 문서화 주석: 해당 메서드와 클라이언트 사이의 규약을 명료히 기술

요약 설명은 반드시 대상의 기능을 고유하게 기술해야 한다. *한 클래스/인터페이스 안에 요약 설명이 똑같은 멤버가 둘 이상이면 안 됨)

애너테이션 타입을 문서화할 때는 멤버들에도 모두 주석을 달아야 한다.

클래스 또는 정적 메서드의 스레드 안전 수준을 API 설명에 포함해야 한다. 직렬화할 수 있다면 직렬화 형태도.

 


9장: 일반적인 프로그래밍 원칙

아이템 57. 지역 변수의 범위를 최소화하라

 

가장 처음 쓰일 때 선언하라.

거의 모든 지역변수는 선언과 동시에 초기화해야 한다.

메서드를 작게 유지하고 한 가지 기능에 집중해라.


아이템 58. 전통적인 for문보다는 for-each 문을 사용하라

비교했으 코드 간결성 높임. 명료하고 버그를 예방해줌.

사용할 수 없는 상황: 파괴적인 필터링, 변형, 병렬 반복 -> 이때는 일반적인 for문 사용해야

 


아이템 59. 라이브러리를 익히고 사용하라.

표준 라이브러리를 사용하면 그 코드를 작성한 전문가의 지식과 여러분보다 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있다.

Random말고 ThreadLocalRandom

java.lang, java.util, java.io와 그 하위 패키지 익숙해질 것.


아이템60. 정확한 답이 필요하다면 float와 double은 피하라

소수점 추적 때문. BigDecimal 사용하면 반올림 완벽히 제어 가능. 단점: 기본 타입보다 쓰기가 훨씬 불편하고 느림

성능이 중요하고 소수점을 직접 추적할 수 있고 숫자가 너무 크지 않다면 int나 long을 사용, 18자리를 넘어가면 BigDeicmal

아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라

기본 타입: 간단하고 빠름.
오토박싱 사용 시 주의.  필요없는 객체 생성 부작용. 언박싱 과정에서 NPE 주의

아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라

문자열은 다른 값 타입을 대신하기에 적합하지 않다. (기본 타입)
열거 타입을 대신하기에 적합x.
혼합 타입도 대신하기 적합x

권한을 표현하기에 적합x.

아이템 63. 문자열 연결은 느리니 주의하라

문자열 연결 += 연산자로 n개를 잇는 시간은 n^2
문자열은 불변이라서, 두 문자열을 연결할 경우 양쪽의 내용을 모두 복사해야 하기 때문에.
StringBuilder를 사용해서 append를 하라.