티스토리 뷰
728x90
반응형
지역변수의 범위를 최소화하라
- 지역변수의 유효범위를 최대한 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아집니다.
💡 가장 처음 쓰일때 선언합니다.
- 지역변수를 미리 선언하고 나중에 할당하면 코드가 지저분해지고 가독성이 떨어집니다.
- 또한 변수를 실제 사용하는 시점에서 타입과 초기값이 기억나지 않을 수 있습니다.
- 변수의 범위를 제대로 제한하지 않는다면 이미 사용한 뒤에도 GC가 수거하지 않고 힙 메모리에 여전히 남아있을 수 있습니다.
💡 모든 지역변수는 선언과 동시에 초기화합니다.
- 단 초기화에 필요한 정보가 충분하지 않다면 정보가 충분해질때까지 선언을 미뤄야 합니다. 하지만 try-catch 문에서는 예외입니다. 변수를 초기화하는 과정에서 Checked Exception이 발생할 가능성이 있다면 이를 try 블럭 안에서 초기화해야 합니다.
- 반복문에서는 반복 변수의 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이 중괄호 안으로 제한됩니다.
int memberId;
try {
memberId = memberRepository.get();
} catch (NoSuchElementException e) {
throw new NoSuchElementException();
}
💡 while문을 사용하는 경우에도 for문을 사용하는게 좋습니다.
- 아래의 while문 코드에서는 버그가 발생합니다. 복사 붙여넣기를 하면 두번째 while문에서 i.hasNext()이기 때문에 버그가 발생합니다.
- for문을 포함한 for-each문을 사용하면 이러한 문제를 컴파일 단계에서 잡아줍니다.
(반복자의 유효범위가 for문의 종료와 함께 끝나기 때문입니다.)
Iterator<Element> i = c.iterator();
while(i.hasNext()) {
doSomeThing(i.next());
}
Iterator<Element> i2 = c2.iterator();
while(i.hasNext()) { // 버그 발생!!
doSomeThing(i2.next());
}
for(Iterator<Element> i = c.iterator(); i.hasNext();) {
Element e = i.next();
}
for(Iterator<Element> i2 = c2.iterator(); i.hasNext();) {
Element e2 = i2.next();
}
💡 메서드를 가능한 작게 유지하고 한 가지 기능에 집중하는게 좋습니다.
- 한 메서드에 여러 기능을 처리한다면 그중 한 기능과 관련된 지역변수라도 다른 기능을 수행하는 코드에 접근할 수 있습니다. 이를 방지하기 위해서는 메서드를 쪼개는게 좋습니다.
728x90
반응형
'스터디 > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - Item61. 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2022.08.11 |
---|---|
이펙티브 자바 - Item58. 전통적인 for문보다는 for-each문을 사용하라 (0) | 2022.08.09 |
이펙티브 자바 - Item55. 옵셔널 반환은 신중히 하라 (0) | 2022.08.07 |
이펙티브 자바 - Item54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 (0) | 2022.08.06 |
이펙티브 자바 - Item53. 가변인수는 신중히 사용하라 (0) | 2022.08.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- spring boot poi excel download
- 트랜잭셔널 아웃박스 패턴 스프링부트
- java ThreadLocal
- pipe and filter architecture
- 람다 표현식
- spring boot redisson sorted set
- @ControllerAdvice
- spring boot excel download paging
- redis sorted set
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- 서비스 기반 아키텍처
- service based architecture
- transactional outbox pattern
- redis 대기열 구현
- 레이어드 아키텍처란
- space based architecture
- 자바 백엔드 개발자 추천 도서
- java userThread와 DaemonThread
- spring boot excel download oom
- spring boot redisson 분산락 구현
- redis sorted set으로 대기열 구현
- spring boot redisson destributed lock
- pipeline architecture
- transactional outbox pattern spring boot
- JDK Dynamic Proxy와 CGLIB의 차이
- microkernel architecture
- 공간 기반 아키텍처
- polling publisher spring boot
- spring boot redis 대기열 구현
- spring boot 엑셀 다운로드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함