728x90 java21 Item 72. 표준 예외를 사용하라. 표준 예외를 재사용하는 것으로 얻을 수 있는 이점은 다음과 같다. 1. 표준 예외는 많은 프로그래머에게 익숙한 규약을 따른다. 따라서 내가 작성한 API를 다른 사람이 익히고 사용하기 쉬워진다. 2. 예외 클래스 수가 적으면 메모리 사용량이 줄고 클래스를 적재하는 시간도 적게 걸린다. 많이 사용되는 예외들은 다음과 같다. 예외 사용처 IllegalArgumentException 허용하지 않는 값이 인수로 건네졌을 때(null은 따로 NullPointerException 으로 처리) IllegalStateException 객체가 메서드를 수행하기에 적절하지 않은 상태일 때 NullPointerExcetpion null을 허용하지 않는 메서드에 null을 건넸을 때 IndexOutOfBoundsExcepti.. 2022. 4. 17. Item 69. 예외는 진짜 예외 상황에만 사용하라 코드 부터 보자. 1 2 3 4 5 6 7 8 9 try { int i = 0; while (true) { range[i++].climb(); } } catch (ArrayIndexOutOfBoundsException e) { } Colored by Color Scripter cs 이 코드는 배열의 끝에 도달하면 에러를 던져 코드를 종료한다. for-each loop 를 사용하지 않고 이처럼 작성한 이유는 다음과 같다. JVM은 배열에 접근할 때마다 경계를 넘었는지를 검사한다. 반복문 또한 배결 경계에 도달하면 종료한다. 따라서 반복문을 사용하면 경계 검사가 중복되므로 하나를 생량한 것이다. 하지만 이는 다음과 같은 이유로 잘못된 추론이다. 1. 예외는 예외 상황에서만 사용할 목적으로 설계되었으므로 JV.. 2022. 4. 17. Item 11. equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 클래스 인스턴스를 HashMap 같은 컬랙션의 원소로 사용할 때 문제가 발생한다. 자바 레퍼런스의 Object에 있는 hashCode의 명세를 보면 다음과 같이 hashCode를 설명한다. 1. equals 비교에 상요되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동한 그 객체의 hashCode 메서드는 호출 횟수와 무관하게 같은 값을 반환해야 한다. 단, 애플리케이션을 재실행 한다면 값이 달라져도 상관없다. 2. equals(Object)가 두 객체를 같다고 판단하면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다 (논리적으로 같은 객체는 같은 해시코드를 반환해야 한다). 3. equals(Obj.. 2022. 3. 3. Item 46. 스트림에서는 부작용 없는 함수를 사용하라 스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 것이다. 여기서 각 변환은 가능한 이전 단계의 결과를 받아서 처리하는 순수 함수여야 한다. 이를 위해서는 스트림 연산에 건네는 함수 객체는 모두 side-effect가 없어야 한다. 아래의 예시를 보자. 1 2 3 4 5 6 7 Map freq = new HashMap(); try (Stream words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }) } Colored by Color Scripter cs 이 코드는 스트림을 가장한 반복적 코드다. 위에서 명시했듯 스트림에서 사.. 2022. 3. 2. 이전 1 2 3 4 5 6 다음 728x90