본문 바로가기

Reading

(65)
[Effective-Java] Item 58.전통적인 for 문보다는 for-each 문을 사용하라 //컬렉션 순회하기 for(Iterator i = numberList.iterator();i.hasNext();){ Integer number = i.next(); ... } //배열 순회하기 for(int i = 0; i < numberArrays.length; i++{ Integer number = numberArrays[i]; ... } 단순히 순회를 목적으로 한다면 필요한 것은 원소일 뿐인데 위와 같은 for문을 사용해야할까? 이 for문은 다음과 같은 단점을 가진다. 쓰이는 요소 종류가 늘어나면 헷갈려서 오류가 생길 가능성 증가한다. 컬렉션 예시 코드는 반복자 i가 세 번 쓰이고, 배열 예시 코드는 인덱스 i가 네 번 쓰이는데 이는 잘못된 변수 사용 가능성이 커진다. 변수를 잘못 사용할 경우, ..
[Effective-Java] Item 57.지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 사독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 범위를 줄이는 기법 1. 가장 처음 쓰일 때 선언하기 선언 시점부터 그 지점을 포함한 블록이 끝날때까지의 범위를 가지는 지역변수를 막 쓴다면 끔찍한 결과를 초래하니 처음 쓰일 때 선언하자. 변수가 쓰이는 범위보다 앞서 선언될 경우,코드가 어수선하고 가독성이 떨어지며 사용 시점엔 타입과 초기값을 잊을 수 있다. 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝나도 살아 있게 된다. 2. 거의 모든 지역변수는 선언과 동시에 초기화하기 초기화에 필요한 정보가 충분하지 않다면 충분할 때까지 선언을 미루자. try-catch문은 예외다. try-catch문은 변수를 초기화하는 표현식에서 검사 예외를 ..
[Effective-Java] Item 55.옵셔널 반환은 신중히 하라 자바 8 전에는 메소드가 특정 조건에서 값을 반환할 수 없을 때는 예외를 던지거나, null을 반환하는 방법을 사용했다. 예외는 생성할 때 스택 추적 전체를 캡처하는 비용이 만만치않고, null 반환은 별도의 null 처리코드를 추가해야하는 단점이 있다. Optional Optional는 자바 8에서 등장한 개념으로, null이 아닌 T타입 참조를 하나 담거나 아무것도 담지 않을 수 있다. 옵셔널은 원소를 최대 1개 가질 수 있는 불변 컬렉션이고, Collection를 구현하진 않았지만 원칙적으론 그렇게 말한다. 보통은 T를 반환해야 하지만 특정 조건에서는 아무것도 반환하지 않아야 할 때 T대신 Optional를 반환하도록 선언하면 된다. Optional을 반환하는 메소드는 예외를 던지는 메소드보다 유연..
[Effective-Java] Item 54.null이 아닌, 빈 컬렉션이나 배열을 반환하라 컬렉션이 비었으면 null을 반환하는 코드를 보자. private final List cheesesInStock = new ArrayList(); /** * @return 매장 안의 모든 치즈 목록 반환, 재고가 없다면 null 반환 */ public List getCheeses(){ return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } 재고가 없다고 해서 특별히 취급할 이유는 없지만 이렇게 null을 반환하면 클라이언트는 이 null을 처리하는 코드를 추가로 작성해야한다. Shop shop = new Shop(); List cheeses = shop.getCheeses(); if(cheeses != null && cheese..