[이펙티브 자바] 아이템 57~61
아이템 57. 지역변수의 범위를 최소화하라
- 가장 처음에 쓰일 때 선언한다
- 선언과 동시에 초기화한다.
- for 문을 사용시, 인덱스가 반드시 필요한 경우가 아니라면 for-each로 대체하여, 잠재적인 버그를 수정하자. (코드 57-2 관련)
아이템 58. 전통적인 for문보다는 for-each문을 사용하라.
- 반복자(iterator())나 인덱스(i)가 필요하지 않다면 for-each로 대체하자.
- for-each로 대체할 수 없는 경우
1) 컬렉션을 순회하면서 선택된 원소를 지워야하는 경우: 반복자의 remove 메서드 호출 필요
-> JAVA 8부터 removeIF 사용하여 간소화 가능 (예시: https://kdhyo98.tistory.com/38)
2) 컬렉션 순회하면서 원소의 값 일부/전체에 변형이 필요한 경우.
3) 병렬 반복 -> 순서 유지를 위해 idx 사용.
아이템 59. 라이브러리를 익히고 사용하라.
- 미리 구현된 라이브러리를 사용하여, 개발의 핵심 내용에만 집중하자.
얘) Random.nextInt(int), 구글 구아바 라이브러리
- java.lang, java.util. java.io 에는 익숙해지자.
아이템 60. 정확한 답이 필요하다면 float과 double
- float과 double은 넓은 범위의 수를 정밀한 '근사치'로 계산한다.
-> 0.1, 10의 음의 거듭제곱등 표현 불가
얘) 1.03 - 0.42 = 0.6100000000000001로 계산됨.
- 금융 관련 계산에서 사용금지
-> 대신 BigDecimal, int, long을 사용하자
- BigDecimal vs int/long
: BigDecimal
(+) 범위 제한 x
(-) 느리다. 기본타입보다 쓰기 불편하다. (예. price.add(TEM_CENTS))
: long/int =
(+) 빠르다. 사용 간편
(-) 숫자 범위 제한 있음. 소수점 직접 관리해야한다.
아이템 61. 박싱된 기본 타입
- 기본타입 vs 박싱된 기본 타입
: int, long, boolean vs Integer, Long, Boolean
- 차이
1. 값의 식별성: 박싱은 값이 같아도 다르다고 판별될 수 있다.
2. null 포함 가능 여부 (박싱은 null 가진다)
3 메모리 효율: 기본타입이 더 효율적
- 박싱 타입 사용시 주의 사항
: == 사용하지 말것 (코드 61-1)
: 기본 타입과 박싱 타입을 혼용해서 사용하지 말자. NPE 발생할 수도 있다. (코드 61-3)
: 반복문 내부에서 객체에 변화가 가해질 경우, 사용금지 (61-4)
- 언제 박싱 타입 쓸까
1. 컬렉션의 원소, 키 값으로 사용
2. 리플렉션 통해 메서드 호출시