Item 73. Abstraction Level Exceptions

좔상화 μˆ˜μ€€μ— λ§žλŠ” μ˜ˆμ™Έλ₯Ό λ˜μ§€λΌ

μˆ˜ν–‰ν•˜λ €λŠ” 일과 κ΄€λ ¨ μ—†μ–΄ λ³΄μ΄λŠ” μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ μ–΄λ–€ μ—λŸ¬κ°€ λ°œμƒν–ˆλŠ”μ§€ μ•ŒκΈ° μ–΄λ €μ›Œμ§„λ‹€.

μ˜ˆμ™Έ λ²ˆμ—­(exception translation)

μƒμœ„ κ³„μΈ΅μ—μ„œ μ‚¬μš©ν•  λ•Œ, μ €μˆ˜μ€€ μ˜ˆμ™Έλ₯Ό μž‘μ•„ μžμ‹ μ˜ μˆ˜μ€€μ— λ§žλŠ” μ˜ˆμ™Έλ‘œ λ°”κΏ” λ˜μ§€λŠ” μ˜ˆμ™Έ λ²ˆμ—­(exception translation) 기법을 μ‚¬μš©ν•˜μ—¬ μ—λŸ¬ νŒŒμ•…μ„ μ‰½κ²Œ ν•  수 μžˆλ‹€.

class Example {

    public static void main(String[] args) {
        try {
            // ...
        } catch (LowerLevelException e) {
            // 좔상화 μˆ˜μ€€μ— 맞게 λ‹€λ₯Έ μ˜ˆμ™Έλ‘œ μ „ν™˜
            throw new HigherLevelException();
        }
    }
}

μ‹€μ œλ‘œ AbstractSequentialList의 get λ©”μ„œλ“œλŠ” μ•„λž˜μ™€ 같이 κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.

public abstract class AbstractSequentialList<E> extends AbstractList<E> {

    public E get(int index) {
        try {
            return listIterator(index).next();
        } catch (NoSuchElementException exc) {
            throw new IndexOutOfBoundsException("Index: " + index);
        }
    }
}

μ˜ˆμ™Έ 연쇄(exception chaining)

λ§Œμ•½ μ €μˆ˜μ€€ μ˜ˆμ™Έκ°€ μœ μš©ν•œ 정보λ₯Ό λ‹΄κ³  μžˆλ‹€λ©΄, μ˜ˆμ™Έ 연쇄(exception chaining) 기법을 μ‚¬μš©ν•˜μ—¬ μ˜ˆμ™Έ 연결을 톡해 μ €μˆ˜μ€€ μ˜ˆμ™Έμ˜ 정보λ₯Ό κ³ μˆ˜μ€€ μ˜ˆμ™Έμ— λ‹΄μ•„μ„œ λ˜μ§€λŠ” 방법도 μžˆλ‹€.

μœ„μ™€ 같이 μ‹€μ–΄λ³΄λ‚΄κ²Œ 되면 getCause λ©”μ„œλ“œλ₯Ό 톡해 μ €μˆ˜μ€€ μ˜ˆμ™Έλ₯Ό 확인할 수 μžˆμ–΄, 원인과 κ³ μˆ˜μ€€ μ˜ˆμ™Έμ˜ μŠ€νƒ 좔적 정보λ₯Ό λͺ¨λ‘ 확인할 수 있게 λœλ‹€.

Last updated

Was this helpful?