본문 바로가기

Java/Effective Java3

Item57. 지역변수의 범위를 최소화하라. 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 오늘은 그럼 지역변수의 범위를 줄이는 방법에 대해 알아보자. 1. 처음 쓰일 때 선언하기 미리 선언해두면 변수를 실제로 사용하는 시점에 타입과 초깃값이 기억이 나지 않을 수 있다. 지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때까지 이므로, 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝난 뒤까지 살아 있게 된다. 2. 선언과 동시에 초기화하기 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미루기. ✅ 예외 : try-catch 변수를 초기화 하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화하기. (그렇지 않으면 예외가 블록을 넘어 메서드.. 2022. 7. 3.
Item61. 박싱된 기본 타입보다는 기본 타입을 사용하라. 자바의 데이터 타입은 int, double, boolean 같은 기본타입과 이에 대응하는 Integer, Double, Boolean 같은 박싱된 기본 타입이 있다. 기본타입과 박싱된 기본타입에는 크게 세가지의 차이가 있다. 기본타입과 박싱된 기본타입의 차이 1. 박싱된 기본 타입은 값 뿐만아니라 식별성 이라는 속성도 갖는다. 2. 박싱된 기본 타입은 유효하지 않은 값, 즉 null을 가질 수 있다. 3. 기본 타입이 박싱된 기본 타입보다 시간과 메모리 사용면에서 더 효율적이다. 이 세가지 차이 때문에 주의하지 않고 사용하면 문제가 발생할 수 있다. Integer 값을 오름차순으로 정렬하는 예시를 보자. (첫 번째 원소가 두 번째 원소보다 작으면 음수, 같으면 0, 크면 양수를 반환한다.) Compara.. 2022. 7. 3.
Item47. 반환 타입으로는 스트림보다 컬랙션이 낫다. 원소 시퀀스, 일련의 원소를 반환하는 메서드는 많다. 그 중 stream 을 사용해 원소를 반환할 수 있다는 얘기가 있겠지만, stream 은 반복(iteration)을 지원하지 않는다! 그래서 stream 과 반복을 알맞게 조합해야 좋은 코드가 나온다. 그런데❗❗ stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함하며, Iterable 인터페이스가 정의한 방식대로 동작한다!! 그럼에도 for-each 로 stream 을 반복할 수 없는 이유는 Stream 이 Iterable을 확장하지 않아서이다..! 자바 타입 추론의 한계로 컴파일되지 않는 예시 for (ProcessHandle ph : ProcessHandle.allProcesses() :: iterator) { ^.. 2022. 6. 29.