Item 75 - 예외의 상세 메시지에 실패 관련 정보를 담으라
스택 추적(stack trace) 예외 객체의 toString 메서드를 호출해 얻은 문자열 일반적으로 예외 클래스 이름 뒤에 상세 메시지가 붙는 형태 프로그래머 혹은 신뢰성 엔지니어(Site Reliability Engineer, SRE)가 실패 원인을 분석하기 위한 유일한 정보인 경우가 많다. 실패를 재현하기 힘든 경우, 더 자...
스택 추적(stack trace) 예외 객체의 toString 메서드를 호출해 얻은 문자열 일반적으로 예외 클래스 이름 뒤에 상세 메시지가 붙는 형태 프로그래머 혹은 신뢰성 엔지니어(Site Reliability Engineer, SRE)가 실패 원인을 분석하기 위한 유일한 정보인 경우가 많다. 실패를 재현하기 힘든 경우, 더 자...
메서드가 던지는 예외는 그 메서드를 올바로 사용하는데 아주 중요한 정보다. 따라서 각 메서드가 던지는 예외 하나하나를 문서화하는데 충분한 시간을 쏟아야한다. - item 56 검사 예외는 따로따로 선언하고, 반드시 문서화하자. 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문...
예외 번역(Exception Translation) 상위 계층에서 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꿔 던지는것 try { ... // 저수준 추상화를 이용한다. } catch (LowerLevelException e) { throw new HigherLevelException(...); // 추상화 수준에 맞게...
코드를 재사용하면 이점이 많듯이 예외도 마찬가지다. 자바 라이브러리는 대부분 API에서 쓰기에 충분한 예외를 제공한다. 표준 예외의 장점 👍 표준이기 때문에 다른 개발자가 코드를 보고 예외의 의미를 이해하기 쉬워진다. 예외 클래스 수가 적을수록 메모리 사용량과 클래스를 적재하는 시간을 아낄 수 있다. 직렬화에도 용이하다. 가장 많...
검사 예외를 제대로 활용하면 프로그램의 안정성과 질을 높일 수 있다. 검사 예외를 과하게 사용하면 🤔 검사 예외는 호출자가 처리해야 하는 강제성을 지니기 때문에 부담을 준다. try-catch로 처리하거나 throws를 던져 문제를 전파해야 한다. 검사 예외를 던지는 메서드는 스트림 안에서 직접 사용할 수...
예외의 종류 🧐 예외는 throwable 타입이라고 한다. 예외에는 검사 예외, 비검사 예외가 있으며 비검사 예외의 하위에 런타임 예외와 에러가 있다. 검사 예외 (Checked Exception) 비검사 예외 (Unchecked Exception) 런타임 예외 (Runtime Exception) 에...
예외 처리를 제어 흐름 방식으로 사용했을 때 🙁 // 예외를 완전히 잘못 사용한 예 try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 배열의 원소를 순회하면서 무한루프를 돌다가, 배열의 끝에 도...
자바 언어의 명명 규칙 🎯 철자와 문법 두 범주로 나뉜다. 철자 규칙 ✔️ 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다. 특별한 이유가 없는 한 반드시 따라야 한다. 패키지 명명법 .으로 구분하여 계층적으로 이름을 짓는다. 보통 인터넷 도메인 이름을 역순으로 사용한다. ...
최적화 격언 👨💻 (맹목적인 어리석음을 포함해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨터 죄악이 더 많다(심지어 효율을 높이지도 못하면서). 윌리엄 울프 (전체의 97% 정도인) 자그마한 효율성은 모두 잊자. 섣부른 최적화가 만악의 근원이다. 도널드 크루스 최적화를 할 때는 다음 두 규칙을 따르라. 첫 번째...
자바 네이티브 인터페이스(Java Native Interface, JNI)란? 자바 프로그램이 네이티브 메서드를 호출하는 기술 네이티브 메서드란, C나 C++같은 네이티브 프로그래밍 언어로 작성한 메서드 네이티브 메서드가 주로 쓰이는 곳 🔎 (1) 레지스트리 같은 플랫폼 특화 기능 자바가 성숙해지면서 (OS 같은) 하부 플랫폼...