item 72 sijun - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„ API์—์„œ ์“ฐ๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ˆ˜์˜ ์˜ˆ์™ธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋“ค์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์šฐ์„  ํ‘œ์ค€ ์˜ˆ์™ธ๊ฐ€ ์•„๋‹Œ Custom Exception๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ์ด๋‹ค.

package test;

public class SampleException extends Exception {

    int number;

    public SampleException(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "SampleException{number=" + number + '}';
    }
}
package test;

public class Test {

    public static void main(String[] args) throws SampleException {

        throw new SampleException(13);
    }
}

/**
---------------๊ฒฐ๊ณผ-----------------------------------
Exception in thread "main" SampleException{number=13}
	at test.Test.main(Test.java:7)

Process finished with exit code 1
*/

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ง์ ‘ ์„ค๊ณ„ ์‹œ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ตํžˆ๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ์ฆ๊ฐ€ํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๋‹จ์ ์ด ์žˆ๋‹ค. ์ด์— ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋ฉฐ ์•„๋ž˜๋Š” ํ‘œ์ค€ ์˜ˆ์™ธ์˜ ๋ช‡๊ฐ€์ง€ ์˜ˆ์‹œ์ด๋‹ค.

  • IllegalArgumentException: ๋ถ€์ ์ ˆํ•œ arguments ๊ฐ’์„ ๋„˜๊ธธ ๋•Œ ๋˜์ง€๋Š” ์˜ˆ์™ธ

    ex) ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์Œ์ˆ˜๋ฅผ ๊ฑด๋‚ผ ๋•Œ

  • IllegalStateException: ๋Œ€์ƒ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ๋•Œ ๋˜์ง€๋Š” ์˜ˆ์™ธ

    ex) ์ œ๋Œ€๋กœ ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค ํ•  ๋•Œ

๋ฉ”์„œ๋“œ๊ฐ€ ๋˜์ง€๋Š” ์˜ˆ์™ธ ์ค‘ ํŠน์ˆ˜ํ•œ ์ผ€์ด์Šค๋Š” ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•ด ์“ด๋‹ค.

  • NullPointerException > IllegalArgumentException

    • null ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ
  • IndexOutOfBoundsException > IllegalArgumentException

    • sequence์˜ ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ๋„˜๊ธธ ๋•Œ
  • ConcurrentModificationExcpetion: ๋‹จ์ผ ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์„ค๊ณ„ํ•œ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ˆ˜์ •ํ•˜๋ ค ํ•  ๋•Œ ๋˜์ง€๋Š” ์˜ˆ์™ธ

  • UnsupportedOperationException: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋™์ž‘์„ ๋Œ€์ƒ ๊ฐ์ฒด๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š์„ ๋•Œ

    ex) ์›์†Œ๋ฅผ ๋„ฃ์„ ์ˆ˜๋งŒ ์žˆ๋Š” List๋ฅผ ๊ตฌํ˜„์ฒด์— ๋Œ€๊ณ  ๋ˆ„๊ตฐ๊ฐ€ remove ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ด ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๊ฒƒ์ด๋‹ค.

    ์œ„์— ์†Œ๊ฐœ๋œ Exception๋“ค์€ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ด์ง€ ์•Š๊ธฐ์—, ์„ ํƒ์— ์–ด๋ ค์›€์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

    ์˜ˆ๋ฅผ๋“ค์–ด, ์นด๋“œ ๋ฑ์— ๋‚จ์€ ์นด๋“œ ์ค‘ ์ธ์ˆ˜๋กœ ๋ฐ›์€ ๋งŒํผ ์นด๋“œ๋ฅผ ๋ฝ‘๋Š”๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, IllegalArgumentException์ด๋‚˜ IllegalStateException์ด ๋‘˜๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์ด๋Ÿด ๊ฒฝ์šฐ ์ธ์ˆ˜ ๊ฐ’์ด ๋ฌด์—‡์ด์—ˆ๋“  ์–ด์ฐจํ”ผ ์‹คํŒจํ–ˆ์„๊ฑฐ๋ผ๋ฉด IllegalStateException, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด IllegalArgumentExceptino์„ ๋˜์ง€์ž.

    ๊ทธ ์™ธ Exception์€ ์•„๋ž˜ API์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

    https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html