-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Discussed in https://github.com/orgs/Study-2-Effective-Java/discussions/172
Originally posted by bunsung92 March 21, 2023
π ꡬμ±
- 0. TL;DR π
- 1. μλͺ» μ²λ¦¬λ μμΈ
- 2. μμΈ λ²μ(Exception Translation)
- 3. μμΈ μ°μ(exception chanining)
- 4. μ΅μ’ μ 리 π
- 5. νκ³ π§Ή
Table of contents generated with markdown-toc
0. TL;DR π
- μλ κ³μΈ΅μ μμΈ μ²λ¦¬κ° μ΄λ ΅κ³ , κ·Έ μμΈλ₯Ό μμ κ³μΈ΅μ ν΅ν΄ λ ΈμΆνλ€λ©΄ μμΈ λ²μμ μ¬μ©νλΌ.
- μμΈ μ°μλ₯Ό μ΄μ©νλ©΄ μμ κ³μΈ΅μλ λ§₯λ½μ μ΄μΈλ¦¬λ κ³ μμ€ μμΈλ₯Ό λμ§λ©΄μ κ·Όλ³Έ μμΈλ ν¨κ» μλ €μ£Όμ΄ μ€λ₯ λΆμμ λμμ΄ λλ€.
μμΈ λ²μ? μμΈ μ°μ?
1. μλͺ» μ²λ¦¬λ μμΈ
- λ©μλκ° μ μμ€ μμΈλ₯Ό μ²λ¦¬νμ§ μκ³ , λ°κΉ₯μΌλ‘ μ ννλ κ²½μ° (λ°μ μμΉμμ μμΈ μ²λ¦¬νμ§ μλ κ²½μ°λ₯Ό λ§ν¨) μ λν λ¬Έμ λ°μ
- μννλ €λ μΌκ³Ό κ΄λ ¨μλ μμΈκ° λ°μν μμλ€.
- ꡬν λ°©μμ λ°κΎΈλ©΄ λ λ€λ₯Έ μμΈλ₯Ό λ°μμμΌ κΈ°μ‘΄ ν΄λΌμ΄μΈνΈ νλ‘κ·Έλ¨μ κΉ¨λ¨λ¦΄ μ μλ€.
2. μμΈ λ²μ(Exception Translation)
μμ κ°μ μν©μμμ ν΄κ²°μ± μΌλ‘ μ μ λ μ μλ λ°©λ²μ΄λ€.
- μμ κ³μΈ΅μμλ μ μμ€ μμΈλ₯Ό μ‘μ μμ μ μΆμν μμ€μ λ§λ μμΈλ‘ λ°κΏ λμ ΈμΌ νλ€.
public abstract class AbstractSequentialList<E> extends AbstractList<E> {
/**
* Returns the element at the specified position in this list.
*
* @param index index of the element to return
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException if the index is out of range
* (index < 0 || index >= size())
*/
public E get(int index) {
try {
return listIterator(index).next();
} catch (NoSuchElementException exc) {
throw new IndexOutOfBoundsException("Index: "+index);
}
}
}
- μμΈ λ²μμ μ μμ€ μμΈκ° λλ²κΉ
μ λμμ΄ λλ€λ©΄
μμΈ μ°μ(exception chanining)
μ μ¬μ©νλκ² μ’λ€.
3. μμΈ μ°μ(exception chanining)
λ¬Έμ μ κ·Όλ³Έ μμΈ(cause)μΈ μ μμ€ μμΈλ₯Ό κ³ μμ€ μμΈμ μ€μ΄ 보λ΄λ λ°©μμ΄λ€.
μμΈ μ°μλΌλ μ©μ΄λ₯Ό λ³΄λ€ λ μ½κ² μ΄ν΄νκΈ°μ μ’μ λ°©λ²μ
μμΉ
μ΄λΌλ ν€μλλ₯Ό μκ° ν΄ λ³΄λκ² μ’μκ² κ°λ€.
μ μμ€ -> κ³ μμ€
λ³΄λ€ λ μΆμνλ ν΄λμ€μμμ μμΈ μ²λ¦¬λ±μ ν€μλλ‘ μ‘μ μ μλ€.
- λ³λμ μ κ·Όμ λ©μλ(Throwable μ getCause()) λ₯Ό ν΅ν΄ νμνλ€λ©΄ μΈμ λ μ μμ€ μμΈλ₯Ό κΊΌλ΄ λ³Ό μ μλ€.
class HigherLevelException extends Exception {
HigherLevelException(Throwable cause) {
super(cause);
}
}
class ChildClass {
public void publicAPIMethod() {
try {
//do somthing...
} catch (LowerLevelException cause) {
throw new HigherLevelException(cause);
}
}
}
- λλΆλΆμ νμ€ μμΈλ μμΈ μ°μμ© μμ±μλ₯Ό κ°κ³ μλ€.
- μμΈ μ°μλ λ¬Έμ μ μμΈμ (getCause λ©μλ) νλ‘κ·Έλ¨μμ μ κ·Όν μ μκ² ν΄μ£Όλ©°, μμΈκ³Ό κ³ μμ€ μμΈμ μ€ν μΆμ μ 보 ν΅ν©μ ν΄μ€λ€.
- μμΈλ₯Ό μ ννλ κ²λ³΄λ€ μμΈ λ²μνλ κ²μ΄
μ°μν λ°©λ²
μ΄μ§λ§ λ¨μ©ν΄μλ μλλ€. - κ°λ₯νλ€λ©΄ μ μμ€ λ©μλλ μμΈλ₯Ό λ°μνμ§ μλλ‘ νλκ²μ΄ μ΅μ μ΄λ€.
- λλ‘λ
μμ κ³μΈ΅ λ©μλ
μ λ§€κ°λ³μ κ°μ μλ κ³μΈ΅ λ©μλλ‘ κ±΄λ΄κΈ° μ μ 미리 κ²μ¬νλ λ°©λ²μΌλ‘ λͺ©μ μ λ¬μ±ν μ μλ€.(μμ΄ν 49. λ§€κ°λ³μκ° μ ν¨νμ§ κ²μ¬νλΌΒ #114 )
3.1 μ°¨μ μ±
- μλ κ³μΈ΅μμμ μμΈλ₯Ό νΌν μ μλ€λ©΄, μμ κ³μΈ΅μμ κ·Έ μμΈλ₯Ό μ‘°μ©ν μ²λ¦¬νμ¬ λ¬Έμ λ₯Ό API νΈμΆμμκ² μ ννμ§ μλ λ°©λ²μ΄ μλ€.
- μμ κ³μΈ΅μμ ν΄λΉ μ²λ¦¬λ₯Ό μ΄μλ€λ©΄ λ‘κΉ μ ν΅ν΄ κΈ°λ‘νλκ² μ’λ€.
- ν΄λΌμ΄μΈνΈ μ½λμ μ¬μ©μμκ² λ¬Έμ λ₯Ό μ ννμ§ μμΌλ©΄μ νλ‘κ·Έλλ¨Έκ° λ‘κ·Έλ₯Ό λΆμν΄ μΆκ° μ‘°μΉλ₯Ό μ·¨ν μ μλλ‘ ν΄μ£ΌκΈ° λλ¬Έμ΄λ€.

4. μ΅μ’ μ 리 π
κ·Έλμ μΆμν μμ€μ λ§λ μμΈλ 무μμΌκΉ? π€
μμΈ λ²μ
κ³ΌμμΈ μ°μ
λ₯Ό κ³ λ €ν μμΈμ μ²λ¦¬μ΄λ€.μμΈ λ²μ
μ μ μμ€ μμΈλ₯Ό μ²λ¦¬νκ³ μλ μμ (this) μμ€μ λ§λ μμΈλ‘ λ°κΏ λμ§λ κ²μ΄λ€.μμΈ μ°μ
λ λ¬Έμ μ μμΈ(cause) μ μμ€ μμΈλ₯Ό κ³ μμ€ μμΈμ μ€μ΄ 보λ΄λ λ°©μμ΄λ€.
5. νκ³ π§Ή
2023-03-26 μΌ
- κ³ μμ€, μ μμ€, μμΈ λ²μ, μμΈ μ°μ λ±λ± μ©μ΄κ° μ½μ§μμ ννΈμλ€.
- μμΈμ λμ Έμ£Όλκ° μμΈ λ²μκ³Ό μμΈ μ°μλ₯Ό κ΅¬λΆ μ§μ΄μ£Όλ ν¬μΈνΈλΌ μκ° ν μ μλκ² κ°λ€.
- μμΈλ₯Ό λ€λ£¨λ μΌμ μΈμ λ μ€μνλ©°, λ‘κΉ νλ μ΅κ΄ μμ λΌμ λ°μμΌ νλ€κ³ μκ°νλ€.
- λ°λΌμ, μ§νλ νλ‘μ νΈμλ μμΈλ μν©μ λ§κ², μνλ μμΈ μ²λ¦¬λ₯Ό ν μ μλλ‘ λ Έλ ₯ν΄μΌκ² λ€.
μΆμ²
https://github.com/Meet-Coder-Study/book-effective-java/blob/main/10%EC%9E%A5/73_%EC%B6%94%EC%83%81%ED%99%94_%EC%88%98%EC%A4%80%EC%97%90_%EB%A7%9E%EB%8A%94_%EC%98%88%EC%99%B8%EB%A5%BC_%EB%8D%98%EC%A0%B8%EB%9D%BC_%EA%B9%80%EC%84%9D%EB%9E%98.md
https://data-flair.training/blogs/java-exception/