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

Was this helpful?