Item 75. Failure Information

μ˜ˆμ™Έμ˜ 상세 λ©”μ‹œμ§€μ— μ‹€νŒ¨ κ΄€λ ¨ 정보λ₯Ό λ‹΄μœΌλΌ

μ˜ˆμ™Έλ₯Ό μž‘μ§€ λͺ»ν•΄ ν”„λ‘œκ·Έλž¨μ΄ μ‹€νŒ¨ν•˜λ©΄ μžλ°” μ‹œμŠ€ν…œμ€ μŠ€νƒ 좔적(stack trace)을 좜λ ₯ν•˜λŠ”λ°, μŠ€νƒ 좔적에 좜λ ₯λ˜λŠ” λ©”μ‹œμ§€λŠ” μ˜ˆμ™Έ 객체의 toString λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ μ–»λŠ” λ¬Έμžμ—΄μ΄λ‹€. λ•Œλ¬Έμ— toString λ©”μ„œλ“œμ— κ°€λŠ₯ν•œ λ§Žμ€ 정보λ₯Ό λ‹΄μ•„ λ°˜ν™˜ν•˜λŠ” 것이 디버깅에 도움이 λœλ‹€.

μ‹€νŒ¨ λ©”μ‹œμ§€μ— 담을 정보

μ‹€νŒ¨ μˆœκ°„μ„ μ •ν™•νžˆ ν¬μ°©ν•˜κΈ° μœ„ν•΄μ„  μ˜ˆμ™Έμ™€ κ΄€μ—¬λœ λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ™€ ν•„λ“œμ˜ 값을 μ‹€νŒ¨ λ©”μ‹œμ§€μ— λ‹΄μ•„μ•Ό ν•œλ‹€.

예λ₯Όλ“€μ–΄ IndexOutOfBoundsException에, λ²”μœ„μ˜ μ΅œμ†Ÿκ°’κ³Ό μ΅œλŒ“κ°’, 그리고 인덱슀의 μ‹€μ œ 값을 λ‹΄μœΌλ©΄ μ’‹μ§€λ§Œ, μžλ°”μ—μ„œλŠ”(17 버전 κΈ°μ€€) λ¬Έμžμ—΄μ΄λ‚˜ μ •μˆ˜ 인덱슀 값을 λ°›λŠ” μƒμ„±μžλ§Œ μ‘΄μž¬ν•œλ‹€. λ§Œμ•½ 더 μžμ„Έν•œ 정보λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄μ„œ μ•„λž˜μ™€ 같이 λ²”μœ„μ˜ μ΅œμ†Ÿκ°’κ³Ό μ΅œλŒ“κ°’μ„ λ°›λŠ” μƒμ„±μžκ°€ μžˆμ–΄λ„ μ’‹μ•˜μ„ 것이닀.

class IndexOutOfBoundsException extends RuntimeException {

    /**
     * IndexOutOfBoundsException을 μƒμ„±ν•œλ‹€.
     * 
     * @param lowerBound 인덱슀의 μ΅œμ†Ÿκ°’
     * @param upperBound 인덱슀의 μ΅œλŒ“κ°’ + 1
     * @param index 인덱슀의 μ‹€μ œ κ°’
     */
    public IndexOutOfBoundsException(int lowerBound, int upperBound, int index) {
        // μ‹€νŒ¨λ₯Ό ν¬μ°©ν•˜λŠ” 상세 λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•œλ‹€.
        super(String.format(
                "μ΅œμ†Ÿκ°’: %d, μ΅œλŒ“κ°’: %d, 인덱슀: %d",
                lowerBound, upperBound, index));

        // ν”„λ‘œκ·Έλž¨μ—μ„œ μ΄μš©ν•  수 μžˆλ„λ‘ μ‹€νŒ¨ 정보λ₯Ό μ €μž₯ν•΄λ‘”λ‹€.
        this.lowerBound = lowerBound;
        this.upperBound = upperBound;
        this.index = index;
    }
}

Last updated