반응형
지역변수의 범위를 최소화하자
지역변수의 유효범위를 최소로 줄일 경우 장점
- 코드 가독성이 좋아진다.
- 유지보수성이 높아진다.
- 오류 가능성이 낮아진다.
지역변수의 범위를 줄이는 방법
- 가장 처음 쓰일 때 선언한다.
- 선언과 동시에 초기화 한다. 초기화를 하지 않는 상태라면 선언을 최대한 미뤄야 한다.
- 메서드를 작게 유지하고 한 가지 기능에 집중하게 한다.
전통적인 for문 대신 for-each 문 사용
전통적인 for문 단점
- 반복자와 인덱스 변수는 코드를 지저분하게 한다.
- 요소 종류가 늘어날 수록 오류가 생길 가능성이 높아진다.
- 컬렉션이냐 배열이냐에 따라 코드 형태가 달라진다.
향상된 for문인 for-each 문을 사용하면 코드도 깔끔해지고, 오류가 날 일도 없어진다.
for-each문을 사용 못하는 경우
- 파괴적인 필터링: 컬렉션을 순회하면서 선택된 원소를 제거해야 할때이다.
- 변형: 리스트나 배열을 순회하면서 원소의 값을 교체해야 하는 경우
- 병렬 반복: 여러 컬렉션을 병렬로 순회해야 하는 경우 각각의 반복자와 인덱스 변수를 사용해 엄격하고 명시적으로 제어해야 하므로 전통적인 for문을 사용해야 한다.
정확한 답을 위해 float, double보다는 BigDecimal, int, long을 사용하자
float, double
float와 double 타입은 공학, 광학 계산용에 사용하기 위해 설계되었다. 부동 소수점 연산이나 넓은 범위의 수를 빠르게 '근사치'로 계산하도록 설계된 것이다. 때문에 '근사치'가 아닌 정확한 결과가 필요할 때는 사용하면 안된다.
금융계산 같은 정확성을 위한 BigDecimal, int, long
- int, long: 크기가 제한되고, 소수점을 직접 관리해야 한다.
- BigDecimal
- 소수점 추적은 시스템에 맡긴다.
- 여덟 가지 반올림 모드를 이용하여 반올림을 제어할 수 있다.
- 느리기 때문에 성능저하가 우려된다.
때문에 숫자가 너무 크지 않고 성능이 중요하고 소수점을 직접 추적할 수 있으면 int나 long을 사용하자.
숫자를 아홉 자리 십진수로 표현 가능하면 int,
열여덟 자리 십진수로 표현 가능하면 long,
열여덟 자리를 넘어가면 BigDecimal을 사용하도록 하자.
문자열 연결 시 성능이 중요하면 StringBuilder를 사용하자
성능이 매우 중요한 경우
많은 문자열을 연결할 때는 문자열 연결 연산자(+) 대신 StringBuilder를 사용하자.
객체는 인터페이스를 사용해 참조하자
적합한 인터페이스만 있다면
매개변수 / 반환값 / 변수 / 필드를 전부 인터페이스 타입으로 선언하는 것이 좋다.
인터페이스 타입으로 작성하면 프로그램이 유연해진다.
적합한 인터페이스가 없다면 클래스의 계층 구조 중 필요한 기능을 만족하는 가장 덜 구체적인(상위의) 클래스를 타입으로 사용하는 것이 좋다.
반응형
'Reading Book > 이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 메서드 설계 주의점 (0) | 2022.12.12 |
---|---|
[이펙티브 자바] Enum과 EnumMap (0) | 2022.12.12 |
[이펙티브 자바] 클래스와 인터페이스를 유연하게 만드는 방법 (0) | 2022.12.12 |
[이펙티브 자바] Object 메소드 관련 규약 + Comparable (0) | 2022.12.12 |
[이펙티브 자바] try-finally 보다 try-with-resources 사용하자 (0) | 2022.12.12 |