CustomException

์ปค์Šคํ…€ ์˜ˆ์™ธ(Custom Exception)

์ผ๋ฐ˜ ์˜ˆ์™ธ๋กœ ์„ ์–ธํ•  ๊ฒฝ์šฐ Exception์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„

์‹คํ–‰ ์˜ˆ์™ธ๋กœ ์„ ์–ธํ•  ๊ฒฝ์šฐ์—๋Š” RuntimeException์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒดํฌํ•˜๋Š” ์ผ๋ฐ˜ ์˜ˆ์™ธ๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒดํฌํ•˜์ง€ ์•Š๋Š” ์‹คํ–‰ ์˜ˆ์™ธ๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜ ์˜ˆ์™ธ๋กœ ์„ ์–ธํ•  ๊ฒฝ์šฐ Exception์„ ์ƒ์†ํ•˜๋ฉด ๋˜๊ณ , ์‹คํ–‰ ์˜ˆ์™ธ๋กœ ์„ ์–ธํ•  ๊ฒฝ์šฐ์—๋Š” RuntimeException์„ ์ƒ์†ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ด๋ฆ„์€ Exception์œผ๋กœ ๋๋‚˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ž‘์„ฑ ์‹œ ์ƒ์„ฑ์ž๋Š” ๋‘ ๊ฐœ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
    1. ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
    2. ์˜ˆ์™ธ ๋ฐœ์ƒ ์›์ธ(์˜ˆ์™ธ ๋ฉ”์‹œ์ง€)์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด String ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ์ƒ์„ฑ์ž

์˜ˆ์™ธ ๋ฉ”์‹œ์ง€์˜ ์šฉ๋„๋Š” catch {} ๋ธ”๋ก์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ฝ”๋“œ์—์„œ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ

RuntimeException์„ ์ƒ์†๋ฐ›์•„ ์ž‘์„ฑํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

public class CustomException extends RuntimeException {

    // 1. ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
    CustomException() {

    }

    // 2. ์˜ˆ์™ธ ๋ฐœ์ƒ ์›์ธ(์˜ˆ์™ธ ๋ฉ”์‹œ์ง€)์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด String ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ์ƒ์„ฑ์ž
    CustomException(String message) {
        super(message); // RuntimeException ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    }
}

์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

throw new ์˜ˆ์™ธ();
throw new ์˜ˆ์™ธ("๋ฉ”์‹œ์ง€");

์ปค์Šคํ…€ ์˜ˆ์™ธ ํ™œ์šฉ

๊ฐ•์ œ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์—์„œ ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

public static void main(String[] args) {
    try{
        test();
    } catch (CustomException e) {
        System.out.println("์ปค์Šคํ…€ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ");
    }
}

public static void test() throws CustomException {
    throw new CustomException("์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.");
}

์˜ˆ์™ธ ์ •๋ณด ์–ป๊ธฐ

try ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋˜๋ฉด ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” catch ๋ธ”๋ก์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜์—์„œ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์˜ˆ์™ธ ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” Exception ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Exception์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ๋ชจ๋“  ์˜ˆ์™ธ ๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Exception๋Š” Throwable๋ฅผ ์ƒ์†๋ฐ›๊ณ  Throwable์— ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” getMessage()์™€ printStackTrace()์ž…๋‹ˆ๋‹ค.

public class Exception extends Throwable {

    public Exception() {
        super();
    }

    public Exception(String message) {
        super(message);
    }
    
    // (. . .) ์ƒ๋žต
}

public class Throwable implements Serializable {

    public String getMessage() {
        return detailMessage;
    }    
    
    public void printStackTrace() {
        printStackTrace(System.err);
    }
    
    // (. . .) ์ƒ๋žต
}

getMessage()

String ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค๋ฉด, ๋ฉ”์‹œ์ง€๋Š” ์ž๋™์ ์œผ๋กœ ์˜ˆ์™ธ ๊ฐ์ฒด ๋‚ด๋ถ€์— ์ €์žฅ๋˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€์˜ ๋‚ด์šฉ์—๋Š” ์™œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

printStackTrace()

์˜ˆ์™ธ ๋ฐœ์ƒ ์ฝ”๋“œ๋ฅผ ์ถ”์ ํ•ด์„œ ๋ชจ๋‘ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ์–ด๋””์—์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ƒ์„ธํ•˜๊ฒŒ ์ถœ๋ ฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์„ ๋•Œ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ์˜ˆ์™ธ ํ™œ์šฉ

public static void main(String[] args) {

    try{
        test();
    } catch (CustomException e) {
        System.out.println("์ปค์Šคํ…€ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ");
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}

public static void test() throws CustomException {
    throw new CustomException("์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.");
}

์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ: sayit.tistory

Leave a comment