
검사 예외든, 비검사 예외든, 추상 메서드든, 구체 메서드든 메서드가 던질 가능성이 있는 모든 예외를 문서화하라. 🐱👤 검사예외 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하자. 만약, 공통 상위 클래스 하나로 예외를 뭉뚱그려 선언한다면 메서드 사용자에게 각 예외에 대처할 수 있는 힌트를 주지 못할뿐더러, 같은 맥락에서 발생할 여지가 있는 다른 예외들까지 삼켜버릴 수 있어 API 사용성을 크게 떨어뜨린다. (하지만 오직 JVM만이 호출하는 main 메서드는 예외다. Exception을 던지도록 선언해도 괜찮음) 🐱💻 비검사예외 자바 언어가 요구하는 것은 아니지만, 비검사 예외도 검사 예외처럼 문서화해두면 도움이 된다. 잘 정비된..

생성자나 정적 팩토리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 것이 더 좋다. ⛔ 기존 문제점 정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다. 보통 필수 매개변수와 선택 매개변수가 있을 때 필수 매개변수와 선택 매개변수를 1개 받는 생성자, 2개 받는 생성자, 3개 받는 생성자 등의 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식을 사용한다. 하지만 이런 생성자는 매개변수 개수가 많아지면 - 클라이언트 코드를 작성하거나 읽기 어렵고, - 코드를 읽을 때 각 값의 의미가 무엇인지 헷갈리고, - 매개변수가 몇 개인지 주의해서 세어보아야 하고, - 클라이언트가 실수로 매개변수의 순서를 바꿔 건네줘도 컴파일러는 알아채지 못하고, ..

예외 번역과 예외 연쇄를 사용해라. 수행하려는 일과 관련 없어 보이는 예외가 튀어나올 때가 있다. 메서드가 저수준 예외를 처리하지 않고 바깥으로 전파해버릴 때 일어난다. 이와 같은 방식은 내부 구현 방식을 드러내어 윗 레벨 API를 오염시키는 문제가 있다. 이와 같은 문제를 피하려면 예외 번역을 사용해야 한다. 🐱🚀 예외 번역 (exception translation) 상위 계층에서 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꿔 던지는 방법이다. try{ ... // 저수준 추상화를 이용한다. } catch (LowerLevelException e){ // 추상화 수준에 맞게 번역한다. throw new HigherLevelException(...); } 🐱💻 예외 연쇄 (exceptio..

상황에 부합한다면 항상 표준 예외를 재사용하자. 예외를 재사용하는 것이 좋으며, 자바 라이브러리는 대부분 API에서 쓰기에 충분한 수의 예외를 제공한다. 표준 예외를 재사용하면 얻는 것이 많다. 첫 번째, 여러분의 API가 다른 사람이 익히고 사용하기 쉬워진다. 두 번째, 여러분의 API를 사용한 프로그램도 낯선 예외를 사용하지 않게 되어 읽기 쉽게 된다 세 번째, 예외 클래스 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다. ⛔ 표준 예외 종류 IllegalArgumentException - 호출자가 인수로 부적절한 값을 넘길 때 던지는 예외 - ex. 반복 횟수를 지정하는 매개변수에 음수를 건낼 때 쓸 수 있다. IllegalStateException - 대상 객체의 상태가 ..
- Total
- Today
- Yesterday
- Retrofit2
- dp
- 알고리즘
- docker
- 운영체제
- 그래프탐색
- DevOps
- BFS
- 토큰기반인증
- 조합
- 순열
- 아이템59
- 백준
- springboot
- Container
- cicd
- dfs
- IMAGE
- EffectiveJava
- OS
- bruteforce
- BOJ
- Java
- 완탐
- 완전탐색
- 아이템60
- docker-compose
- 이펙티브자바
- 아이템61
- subset
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |