์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ ๋ถ€ํŠธ์บ ํ”„ TIL ํšŒ๊ณ ] BE 13๊ธฐ_9์ผ์ฐจ_'๋‹ค์–‘ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ'

LEFT 2024. 12. 12. 23:57

๐Ÿฆ๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ ๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„ 13๊ธฐ ๐Ÿฆ
TIL ํšŒ๊ณ  - [9]์ผ์ฐจ

๐Ÿš€ 9์ผ์ฐจ์—์„œ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋” ๊นŠ๊ฒŒ ์•Œ์•„๋ณด๊ณ , ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์™€ ์ž๋™ ๋ฆฌ์†Œ์Šค ๋‹ซ๊ธฐ ๋“ฑ ์ƒˆ๋กœ์šด ๊ฐœ๋…๋“ค์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์—์„œ ์ž๋ฐ”๊ฐ€ ์ •์˜ํ•˜์ง€ ๋ชปํ•œ ์˜ˆ์™ธ๋“ค์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์คŒ์œผ๋กœ์จ ์˜ˆ์™ธ๋ฅผ ๋” ์ž˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜์—ˆ๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ์™€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ [์€ํ–‰ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ] ์‹ค์Šต์ด ๊ฝค๋‚˜ ์–ด๋ ค์› ๋‹ค.๐Ÿฅฒ


<์˜ˆ์™ธ๋ฐœ์ƒ>

โ“1. ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ (Runtime Exception = Unchecked Exception)

public class ExceptionExam01 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        
        // IndexOutOfBoundsException ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
        // ์ด ์˜ค๋ฅ˜๋Š” ์ปดํŒŒ์ผ ์‹œ์— ์ฒดํฌํ•˜์ง€ ์•Š๋Š”๋‹ค. 
        arr[5] = 10;

        // ์ด ๊ฒฝ์šฐ ์ƒ์„ฑํ• ๋•Œ๋ถ€ํ„ฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ ์ค‘
        FileInputStream fis = null;
        fis = new FileInputStream("test.txt");
    }
}
  • arr[5] = 10
    RuntimeException์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ์Œ์„ ํ™•์ธ ๊ฐ€๋Šฅ (Exception API) ์ด ์˜ค๋ฅ˜๋Š” ์ปดํŒŒ์ผ ์‹œ์— ์ฒดํฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
    (์‹คํ–‰ ์‹œ์— ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค = ์ปดํŒŒ์ผ ์‹œ์—๋Š” ๋„˜์–ด๊ฐ„๋‹ค = ๊ฒฐ๊ตญ ์˜ˆ์™ธ๋Š” ๋ฐœ์ƒํ•œ๋‹ค)

  • ์ด ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์‹œ ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š”๋‹ค. (= Unchecked Exception) (=Runtime Exception)

IndexOutOfBoundsException - RuntimeException์„ ์ƒ์†๋ฐ›์Œ

<์‹คํ–‰ ์‹œ ์˜ˆ์™ธ๋ฐœ์ƒํ•˜๋Š” RuntimeException์˜ ๊ฒฝ์šฐ - ์‚ฌ์šฉ์ž๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•ด์„œ ๋งŒ๋“ฆ>

try{
    arr[5] = 10;
}catch(Exception e){
    System.out.println(e);
}
  • FileInputStream fis = new FileInputStream(”test.txt”)
    Unhandled Exception (์˜ˆ์™ธ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์•˜๋‹ค๋Š” ํ‘œ์‹œ)

  • FileNotFoundException์€ Runtime Exception์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ์ง€ ์•Š์Œ
    = Runtime Exception์ด ์—†๋Š” ์˜ˆ์™ธ๋“ค์€ ์ปดํŒŒ์ผ ์‹œ์— ์˜ˆ์™ธ ๋ฐœ์ƒ

  • ํ•ด๊ฒฐ๋ฐฉ๋ฒ• = ๐Ÿ’ก try-catch๋กœ ๋ฌถ์–ด์ค€๋‹ค.
  • ์ด ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๊ฐ•์ œํ•œ๋‹ค. (=Checked Exception)

<Runtime Exception์˜ ํŠน์ง•>

  • java.langํŒจํ‚ค์ง€
  • Exceptionํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค
  • ์ฃผ๋กœ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ
  • ๋น„๊ฒ€์‚ฌํ˜• ์˜ˆ์™ธ (Unckecked Exception)
    Runtime Exception๊ณผ ๊ทธ ์„œ๋ธŒ ํด๋ž˜์Šค๋Š” ๋น„๊ฒ€์‚ฌํ˜• ์˜ˆ์™ธ๋“ค๋กœ ๋ถ„๋ฅ˜๋˜์–ด
    ์ปดํŒŒ์ผ ์‹œ์ ์— “์ฒดํฌ๋˜์ง€ ์•Š๊ณ ” ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์‹ค์ˆ˜๋กœ ์ธํ•ด ๋ฐœ์ƒ
    ex. ์ž˜๋ชป๋œ ํ˜•๋ณ€ํ™˜, ๋ฐฐ์—ด์˜ ์ž˜๋ชป๋œ ์ธ๋ฑ์‹ฑ ๋“ฑ

  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜๊ธฐ ์•Š๊ธฐ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ•ด์น˜์ง€ ์•Š์Œ
    ํ•˜์ง€๋งŒ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ์Œ

  • ex. ArrayIndexOutOfBoundsException : ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ์ž˜๋ชป ์ ‘๊ทผ
    NullPointerException : null ์ฐธ์กฐ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ ์‹œ๋„
    ClassCastException : ์ž˜๋ชป๋œ ํ˜•๋ณ€ํ™˜ ์‹œ๋„
    ArithmeticException : ์ˆ˜ํ•™์  ๋ถˆ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ ์‹œ๋„ (0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋“ฑ)

โ“2. ์ปดํŒŒ์ผ ์‹œ ์ฒดํฌํ•˜๋Š” ์˜ˆ์™ธ (Checked Exception)

<์‹คํ–‰ ์ „ ์˜ˆ์™ธ๋ฐœ์ƒ์ค‘ : ์ด ๊ฒฝ์šฐ๋Š” ๋งŒ๋“ค์–ด์ค˜์•ผ๋งŒ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ>

FileInputStream fis = null;
try{
    fis = new FileInputStream("test.txt");
}catch (FileNotFoundException e){
    System.out.println(e);
}

FileNotFoundException์€ RuntimeException์„ ์ƒ์†๋ฐ›์ง€ ์•Š์Œ

<Chekced Exception์˜ ํŠน์ง•>

  • ์ปดํŒŒ์ผ ์‹œ์ ์— ์ฒดํฌ๋˜๋Š” ์˜ˆ์™ธ์œ ํ˜•
  • Exceptionํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค์ด์ง€๋งŒ, Runtime Exception์˜ ์„œ๋ธŒํด๋ž˜์Šค๋Š” ์•„๋‹˜
  • ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์™ธ๋ถ€์š”์ธ์— ์˜ํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ์ƒํ™ฉ
  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒดํฌํ•œ ์ด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    try-catch๋ธ”๋ก ์‚ฌ์šฉ ํ˜น์€ throws ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์™ธ๋ฅผ ํ˜ธ์ถœํ•œ ๋ฉ”์†Œ๋“œ๋กœ ์ „ํŒŒ

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

  • ex. IOException : ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์‹œ ๋ฐœ์ƒ
    SQLException : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์‹œ ๋ฐœ์ƒ
    FileNotFoundException : ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์— ์ ‘๊ทผ์‹œ ๋ฐœ์ƒ

<์˜ˆ์™ธ์ฒ˜๋ฆฌ>

โ“1. try-catch-finally

  • ๋‚ด๊ฐ€ ์ง์ ‘ ์˜ˆ์™ธ๋ฅผ ํŒ๋‹จํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

โ“2. throws Exception

  • ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค.
  • ์˜ˆ์™ธ๋ฅผ ๋ฐ›์€ ์ชฝ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.
  • main๋ฉ”์†Œ๋“œ์—์„œ throws๋กœ ๋˜์ง„๋‹ค๋ฉด JVM์—๊ฒŒ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ

<throws Exception ์˜ˆ์ œ>

public static void main(String[] args) throws FileNotFoundException{
    FileInputStream fis = new FileInputStream("abc");
}

 

โ“์˜ˆ์™ธ๋– ๋„˜๊ธฐ๊ธฐ (throws)

  • =์˜ˆ์™ธ์ „ํŒŒ
    =Exception Propagation
  • ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๊ทธ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ƒ์œ„ ๋ฉ”์†Œ๋“œ์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ”์œ„์ž„ํ•˜๋Š” ๋ฐฉ๋ฒ•”

  • ์ฑ…์ž„์˜ ๋ถ„๋ฆฌ : ๊ฐ ๋ฉ”์†Œ๋“œ๋‚˜ ํด๋ž˜์Šค๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ์™€๋Š” ๊ด€๋ จ์—†์ด ์ž์‹ ์˜ ๊ธฐ๋Šฅ์— ์ง‘์ค‘
  • ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ ์œ ์ง€ : ๋ฉ”์†Œ๋“œ ๋‚ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์‹œ์—๋Š” ๋ฉ”์†Œ๋“œ์˜ ์ฃผ๋œ ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ์—†์ด ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€
  • ์žฌ์‚ฌ์šฉ์„ฑ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ : ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋กœ์ง์„ ํŠน์ • ๋ฉ”์†Œ๋“œ์—์„œ๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด
    ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ๋™์ผํ•œ ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ์ฝ”๋“œ ์ค‘๋ณต ์ž‘์„ฑํ•˜๊ฒŒ๋จ

  • ํ๋ฆ„ ์ œ์–ด : ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์ƒ์œ„๋ ˆ๋ฒจ๋กœ ์‰ฝ๊ฒŒ ์ด๋™์‹œ์ผœ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ด ๊ฐ€๋Šฅ
  • ์ ์ ˆํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์œ„์น˜ ๊ฒฐ์ • : ๋ชจ๋“  ์˜ˆ์™ธ๋“ค์€ ๋ฐœ์ƒํ•œ ๊ณณ์—์„œ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ,
    ๋•Œ๋ก  ์ƒ์œ„๋ฉ”์†Œ๋“œ์—์„œ ์˜ˆ์™ธ๋ฅผ ๋” ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

  • ๐Ÿ’ก์‹ค๋ฌด์—์„œ๋„ ๋‚ด๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธฐ ํž˜๋“  ๋ฌธ์ œ๊ฐ€ ์žˆ์„๋•Œ ๋น ๋ฅด๊ฒŒ ๋ณด๊ณ ํ•˜๋Š”๊ฒŒ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค.

โ–ถ๏ธ์˜ˆ์ œ - ์˜ˆ์™ธ๋ฅผ ๋ฉ”์†Œ๋“œ ๋ณ„๋กœ ์ฒ˜๋ฆฌ 

// exceptionProcessA() : ์ด ๋ฉ”์†Œ๋“œ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•œ๋‹ค.
public static void exceptionProcessA() {
    try{
        FileInputStream fis = new FileInputStream("abc");
    }catch(Exception e){
        System.out.println(e);
    }
}

// exceptionProcessB() : ์ด ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ํ˜ธ์ถœํ•œ ๊ณณ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค
public static void exceptionProcessB() throws FileNotFoundException {
    FileInputStream fis = new FileInputStream("abc");
}

public static void main(String[] args) {
    // exceptionProcessA() ๋ฉ”์†Œ๋“œ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๊ธฐ๋•Œ๋ฌธ์— ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋Š” ์˜ˆ
    exceptionProcessA();

    // exceptionProcessB()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ๊ธฐ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์˜ˆ
    try{
        exceptionProcessB();
    }catch(FileNotFoundException e){
        System.out.println(e);
    }
}
  • exceptionProcessA()
    ์ด ๋ฉ”์†Œ๋“œ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • exceptionProcessB()
    main๋ฉ”์†Œ๋“œ์—์„œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ด ์˜ˆ์™ธ๋ฅผ ๋ฐ›๋Š”๋‹ค.
    = ํ˜ธ์ถœํ•œ ๊ณณ์—์„œ๋„ ์˜ˆ์™ธ๋ฅผ throws or ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.

โ–ถ๏ธ์‹ค์Šต - throws๋กœ Exception๊ณผ Runtime Exception์„ ์ง€์ •

// ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
// Runtime Exception์— ํ•ด๋‹นํ•จ
public static void exceptionProcessC() throws RuntimeException{
    
}

// Exception์€ Runtime Exception์„ ์ƒ์†๋ฐ›์ง„ ์•Š์œผ๋ฏ€๋กœ
// Checked Exception์— ํ•ด๋‹นํ•จ
public static void exceptionProcessD() throws Exception{

}

public static void main(String[] args) {
    // ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง์ ‘ ํ•˜์ง€ ์•Š์•„๋„ ์—๋Ÿฌ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ
    exceptionProcessC();
    
    // ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•ด์•ผ ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์ง
    exceptionProcessD();
}

exceptionProcessD()๋ฅผ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•จ

public static void main(String[] args) {
    // ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง์ ‘ ํ•˜์ง€ ์•Š์•„๋„ ์—๋Ÿฌ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ
    exceptionProcessC();
    
    // ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•ด์•ผ ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์ง
    try {
        exceptionProcessD();
    } catch (Exception e) {
        System.out.println(e);
    }
}

<์ด์ •๋ฆฌ์ฝ”๋“œ>

public static void exceptionProcessC() throws RuntimeException{
    // 1) ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ชฝ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋„˜๊น€ (๋งก๊น€) - UnChecked Exception์ด ๋ฐœ์ƒ
}

public static void exceptionProcessD() throws Exception{
    // 2) ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ชฝ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋„˜๊น€ (๋งก๊น€) - Checked Exception์ด ๋ฐœ์ƒ
}

public static void exceptionProcessE() {
    // 3) ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ, ์ด ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒฝ์šฐ
    try{
        
    }catch (Exception e){
        System.out.println(e);
    }
}

public static void main(String[] args) {
    // 1) ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง์ ‘ ํ•˜์ง€ ์•Š์•„๋„ ์—๋Ÿฌ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ
    exceptionProcessC();

    // 2) ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ [๋ฐ˜๋“œ์‹œ] ํ•ด์•ผ ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์ง
    try {
        exceptionProcessD();
    } catch (Exception e) {
        System.out.println(e);
    }
    
    // 3) ์˜ˆ์™ธ๊ฐ€ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ
    exceptionProcessE();
}

โ“์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•

์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

  • ์˜ˆ์™ธ๋ฅผ ์ƒ์œ„ํด๋ž˜์Šค๋กœ ๋˜์ง€๋ฉด ์ƒ์œ„ํด๋ž˜์Šค์—์„œ ํ•ด๊ฒฐ๋ฒ•์„ ๋„์™€์ค„ ์ˆ˜ ์žˆ๋‹ค. [์˜ˆ์™ธ๋ฅผ ๋˜์ง]
    ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์ด ๊ผญ ๋‚˜์˜์ง„ ์•Š์€ ๊ฒฝ์šฐ์ด๋‹ค.

  • ์˜ˆ์™ธ๋ฅผ ๋ณธ์ธ์ด ๋งˆ์Œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์•ˆํ•˜๋А๋‹ˆ๋งŒ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค. [์Šค์Šค๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ]

โ“CheckedException vs UnChecked Exception

1. Checked Exception
= Runtime Exception์„ ์ƒ์†๋ฐ›์ง€ ์•Š์€ ์˜ˆ์™ธ๋“ค

  • FileInputStream ๊ฐ™์€ ๊ฒฝ์šฐ throws๋ฅผ ๋˜์ ธ์„œ ์‹คํ–‰ ์ „์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ผญ ํ•ด์•ผํ•จ
  • ํŒŒ์ผ๋ช…์ด ์• ์ดˆ์— ์—†์œผ๋ฉด ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๋ฏ€๋กœ, ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ
  • Java IO๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์€ ๋Œ€์ฒด๋กœ Chekced Exception์ด ๋งŽ์ด ๋ฐœ์ƒ ๋Œ€์ฒด๋กœ throws๋กœ ๋˜์ ธ์ฃผ๊ณ  ์žˆ์Œ
  • ๐Ÿ’กJava IO๋Š” ๋‹จ์ˆœํžˆ ์“ฐ์ง€ ๋ชปํ•˜๊ณ  ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ผญ ํ•ด์ฃผ์–ด์•ผ “๊ฐ์ฒด ์ƒ์„ฑ์ด ์ œ๋Œ€๋กœ ๋จ”
  • โญJava IO๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์„ ํ•˜๋‚˜ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ• ๋•Œ๋„
    ๊ทธ ์•ˆ์— ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

โžก๏ธ์ƒ์„ฑ์ž ์•ˆ์— ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ (new InputStreamReader)
=  ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด : "๋ชฉ์ ์ง€, ๊ทผ์›์ง€ ๋“ฑ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ฝ๊ณ /์“ฐ๊ณ  ํ•˜๋Š” ๊ฒƒ๋“ค์ด ๋ฐ”๋€Œ๋Š” ํŒจํ„ด"


2. UnChecked Exception
= Runtime Exception์„ ์ƒ์†๋ฐ›์€ ์˜ˆ์™ธ๋“ค

  • IndexOutOfBounds ๊ฐ™์€ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์‹œ์—๋Š” ๋ฌธ์ œ ์—†์œผ๋‚˜, ์‹คํ–‰ํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•จ

๐Ÿš€์‹ค์Šต - ์‹ฌ๋ถ€๋ฆ„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

  1. ๋‚ด๊ฐ€ ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ–ˆ์„๋•Œ์™€
  2. ์˜ˆ์™ธ๋ฅผ ๋„˜๊ฒผ์„๋•Œ๋ฅผ ์‹ค์Šต

<์‹ฌ๋ถ€๋ฆ„A()> - ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ๋‚ด๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌ

// ์‹ฌ๋ถ€๋ฆ„A() - ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๋‚ด๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
public static void workingA(){
    String call = "๊ณผ์ž์‚ฌ์™€๋ผ";
    char[] calls = call.toCharArray();
    try{
        calls[6] = '!';
    }catch(Exception e){
        System.out.println(" : [A-์˜ˆ์™ธ์ฒ˜๋ฆฌ] ํ™”๋‚ด์ง€ ๋งˆ์„ธ์š”.");
    }

    System.out.println("[๋‚ด๊ฐ€์ฒ˜๋ฆฌ] : ์•Œ์•„์„œ ์‚ฌ๊ฐˆ๊ฒŒ์š”\n");
}

<์‹ฌ๋ถ€๋ฆ„B()> - ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ์ƒ์œ„ํด๋ž˜์Šค๋กœ ๋˜์ง€๋Š” ๋ฐฉ์‹ throws

// ์‹ฌ๋ถ€๋ฆ„B() - ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ throwsํ•˜๋Š” ๋ฐฉ์‹
public static void workingB() throws Exception{
    String call = "๊ณผ์ž์‚ฌ์™€๋ผ";
    char[] calls = call.toCharArray();
    calls[6] = '!';
}

<main()> - ๋˜์ ธ์ง„ Exception์„ try-catch๋กœ ์ฒ˜๋ฆฌ

public static void main(String[] args) {
    workingA();

    try{
        workingB();
    }catch(Exception e){
        System.out.println(" : [B-์˜ˆ์™ธ์ฒ˜๋ฆฌ] ํ™”๋‚ด์ง€ ๋งˆ์„ธ์š”");
        System.out.println("[์˜ˆ์™ธ๋„˜๊น€] : ๋ญ ์‚ฌ๊ฐˆ๊นŒ์š”?");
    }
}

์‹คํ–‰๊ฒฐ๊ณผ

<์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ณ„ try-catch-finally ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„ ํŒ๋‹จ>

public static void main(String[] args) {
    // 1. ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ์ด ์˜ˆ์™ธ๋ฅผ ์ž˜ ์ฒ˜๋ฆฌํ–ˆ์„๋•Œ
    // > try์˜ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฐ‘ ๋ฌธ์žฅ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Œ
    int[] arr = {1, 2, 3};

    try{
        System.out.println("try - start");
        System.out.println(arr[3]);

        System.out.println("try - end");
    }catch(IndexOutOfBoundsException e){
        System.out.println(e);
    }

    System.out.println("1. To-do");
    System.out.println("2. To-do");
    System.out.println("3. To-do");
    System.out.println("๋");
}

์‹คํ–‰๊ฒฐ๊ณผ

  • arr[3]์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ, IndexOutOfBoundsException์œผ๋กœ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๊ธฐ๋•Œ๋ฌธ์—
  • catch๋ฌธ์ด ์‹คํ–‰๋˜์—ˆ๊ณ 
  • main์˜ ๋ฌธ์žฅ๋„ ์‹คํ–‰์ด ๋˜์—ˆ๋‹ค.
// 2. ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ ์ด ์˜ˆ์™ธ๋ฅผ ์ž˜ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ์„๋•Œ
// > try์˜ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฐ‘ ๋ฌธ์žฅ์ด ์•„์˜ˆ ์‹คํ–‰๋˜์ง€ ์•Š์Œ
int[] arr = {1, 2, 3};

try{
    System.out.println("try - start");

    int i = arr[2] / 0;

    System.out.println(arr[3]);

    System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
    System.out.println(e);
}
// ...

์‹คํ–‰๊ฒฐ๊ณผ

  • int i = arr[2] / 0 ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ๋Š”๋ฐ, ArithmeticException ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜์—ฌ
  • try๋ฌธ์˜ ๊ทธ ๋ฐ‘ ๋ฌธ์žฅ์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ณ ,
  • catch๋ฌธ์˜ ๋ฌธ์žฅ๋„ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ
  • main๋ฉ”์†Œ๋“œ์˜ ๋ฌธ์žฅ๋„ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
// 3. ์˜ˆ์™ธ๋ฐœ์ƒ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์„๋•Œ
// > ๋ชจ๋“  ๋ฌธ์žฅ์ด ์‹คํ–‰๋จ
// + finally๋ธ”๋Ÿญ ์ถ”๊ฐ€
int[] arr = {1, 2, 3};

try{
    System.out.println("try - start");

    int i = arr[2] / 1;

    System.out.println(arr[2]);

    System.out.println("try - end");
}catch(IndexOutOfBoundsException e){
    System.out.println(e);
}finally{
    System.out.println("๋ฐ˜๋“œ์‹œ ์‹คํ–‰๋˜๋Š” ๋ธ”๋Ÿญ");
}
//...

์‹คํ–‰๊ฒฐ๊ณผ

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์„๋•Œ, try๋ฌธ ์•ˆ์˜ ๋ชจ๋“  ๋ฌธ์žฅ์€ ๋ฌผ๋ก  finally๋ฌธ์žฅ, main์˜ ๋ฌธ์žฅ๊นŒ์ง€ ์‹คํ–‰๋œ๋‹ค.


<์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ>

1. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š”

  • ํŒŒ์ผ์ด ๋“ค์–ด์™€์•ผํ•˜๋Š”๋ฐ ํŒŒ์ผ์ด ์—†๋‹ค.
  • ๊ฐ€๋ฆฌ์ผœ์•ผํ•˜๋Š” ๊ฐ’์ด ์—†๋‹ค ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๋ณดํŽธ์ ์ธ ์˜ˆ์™ธ๋กœํ•ด์„œ “์ž๋ฐ”๊ฐ€ ์ด๋ฏธ ์ •์˜ํ•˜๊ณ ์žˆ์Œ”

2. ์ด๋ ‡๊ฒŒ ์ž๋ฐ”๊ฐ€ ์ •์˜ํ•œ ๊ฒƒ๋“ค์„ ์ œ์™ธํ•˜๊ณ 
์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•˜๋Š” ์˜ˆ์™ธ ์‚ฌ์šฉ์ž๊ด€์ ์˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์€ํ–‰์˜ ์ž”๊ณ ๋ณด๋‹ค ๋” ํฐ ๊ธˆ์•ก์„ ์ถœ๊ธˆํ•˜๋ คํ• ๋•Œ → ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผํ•จ
  • ์„ฑ์ ์ด 0~100๊นŒ์ง€ ๋“ค์–ด์™€์•ผํ•˜๋Š”๋ฐ 101์ ์ด ๋“ค์–ด์˜ค๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋Š” ์ž๋ฐ”๊ฐ€ ์ •์˜ํ•  ์ˆ˜ ์—†๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ–ถ๏ธ์˜ˆ์ œ - ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ - ์˜ฌ๋ฐ”๋ฅธ ์ ์ˆ˜ ์ž…๋ ฅ

public static void inputScore(int score){
        // ๊ฐ’์„ ๋ฐ›์•„๋“ค์ผ๋•Œ, 101์ ์ด์ƒ์ด๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹ถ์Œ

        // 1. ์ผ๋ฐ˜์ ์ธ ๋ฌธ๊ตฌ์ถœ๋ ฅ์œผ๋กœ ๋‹ค์‹œ ์ž…๋ ฅ์„ ์š”๊ตฌํ•˜๋Š” ์˜ˆ์ œ
        if(0 < score || score > 100){
            System.out.println("[์žฌ์ž…๋ ฅ์š”๊ตฌ] : ์ ์ˆ˜๋Š” 0~100๊นŒ์ง€๋งŒ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
            return;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("์ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ");
        inputScore(sc.nextInt());
    }
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์žฌ์ž…๋ ฅ์„ ์š”๊ตฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๋Š” ์˜ˆ์ œ

 

public static void inputScore(int score){
    // ๊ฐ’์„ ๋ฐ›์•„๋“ค์ผ๋•Œ, 101์ ์ด์ƒ์ด๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹ถ์Œ

    // 2. ์ด ์ƒํ™ฉ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์˜ˆ์™ธ๋กœ ํŒ๋‹จํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ
    if(0 < score || score > 100){
        throw new Exception("[์˜ˆ์™ธ๋ฐœ์ƒ] : ์ ์ˆ˜๋Š” 0~100๊นŒ์ง€๋งŒ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
    }
    System.out.println("ํ•™์ƒ์˜ ์ ์ˆ˜ : " + score + "์ ");
}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("์ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ");
    inputScore(sc.nextInt());
}
  • ์‚ฌ์šฉ์ž๊ฐ€ ์˜ˆ์™ธ๋ฅผ ์ •์˜ํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์ œ์ด์ง€๋งŒ

์—๋Ÿฌ๋ฐœ์ƒ

  • ์ด์ฒ˜๋Ÿผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ main์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ• ์ง€,
    ๋ฉ”์†Œ๋“œ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ• ์ง€ ํŒ๋‹จํ•ด์•ผํ•œ๋‹ค.  

  • ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ๋ฉ”์†Œ๋“œ์—์„œ๋Š” throws Exception ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ณ 
    ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›๋Š” main๋ฉ”์†Œ๋“œ์—์„œ try-catch ๋ธ”๋ก์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

 

public static void inputScore(int score) throws Exception{
    // ๊ฐ’์„ ๋ฐ›์•„๋“ค์ผ๋•Œ, 101์ ์ด์ƒ์ด๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹ถ์Œ

    // 2. ์ด ์ƒํ™ฉ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์˜ˆ์™ธ๋กœ ํŒ๋‹จํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ
    if(0 < score || score > 100){
        throw new Exception("[์˜ˆ์™ธ๋ฐœ์ƒ] : ์ ์ˆ˜๋Š” 0~100๊นŒ์ง€๋งŒ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
    }
    System.out.println("ํ•™์ƒ์˜ ์ ์ˆ˜ : " + score + "์ ");
}
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("์ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ");
    try{
        inputScore(sc.nextInt());
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
}

โ–ถ๏ธ์˜ˆ์ œ - ์˜ˆ์™ธ๊ฐ์ฒด ์ง์ ‘ ๋งŒ๋“ค๊ธฐ

= ์˜ˆ์™ธ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

// ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ์˜ˆ์™ธ (์ง์ ‘ ์ด๋ฆ„์„ ์ง€์€ ์˜ˆ์™ธ)
public class MyException extends Exception{
	//...
}
  • ์˜ˆ์™ธ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ๋Š” Exception์„ ์ƒ์†๋ฐ›์œผ๋ฉด ๋œ๋‹ค.
    extends Exception

  • UnChekced Exception์„ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด Runtime Exception์„ ์ƒ์†๋ฐ›์œผ๋ฉด ๋œ๋‹ค.
    extends RuntimeException

  • ์ด์ œ ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“  ํ›„ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ๋•Œ
    throw new MyException(); ์ฒ˜๋Ÿผ ์จ์ฃผ๋ฉด ๋œ๋‹ค.
    ์˜ˆ์™ธ๋ฐœ์ƒ ์‹œ MyException์œผ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์™ธ๋ฐœ์ƒ ๋ฌธ๊ตฌ

  • ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๊ฐ์ฒด์—์„œ๋„ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
    = ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ ๋‹ค.
// ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ์˜ˆ์™ธ (์ง์ ‘ ์ด๋ฆ„์„ ์ง€์€ ์˜ˆ์™ธ)
// ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• = Exception์„ ์ƒ์†๋ฐ›๊ธฐ
public class MyException extends Exception{
    // ๊ธฐ๋ณธ์ƒ์„ฑ์ž์—์„œ๋„ super๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ ๊ฐ€๋Šฅ
    public MyException() {
        super("MyException ์˜ˆ์™ธ");
    }

    // Exception๋ฐœ์ƒ ์‹œ ๋ฉ”์‹œ์ง€๋ฅผ ๋„ฃ๊ณ ์‹ถ์Œ
    public MyException(String message) {
        super(message);
    }
}

โ–ถ๏ธ์‹ค์Šต - ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๊ฐ์ฒด ํ™œ์šฉ - ์˜ฌ๋ฐ”๋ฅธ ๋กœ๋˜ ๋ฒˆํ˜ธ

<inputLottoNumbers()> - ๋กœ๋˜๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ

public static void inputLottoNumbers(int num) throws Exception{
    if(1 > num || num > 45){
        throw new MyException("์˜ฌ๋ฐ”๋ฅธ ๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");
    }
}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” : ");
    try{
        inputLottoNumbers(sc.nextInt());
    }catch(Exception e){
        // ์„ธ ์ข…๋ฅ˜์˜ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
        System.out.println("e.getMessage() : " + e.getMessage());
        e.printStackTrace();
        System.out.println("e : " + e);
    }
}

 

<MyExceptionํด๋ž˜์Šค> - ์ง์ ‘ ์ •์˜ํ•œ ์˜ˆ์™ธ

// ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ์˜ˆ์™ธ (์ง์ ‘ ์ด๋ฆ„์„ ์ง€์€ ์˜ˆ์™ธ)
// ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• = Exception์„ ์ƒ์†๋ฐ›๊ธฐ
public class MyException extends Exception{
    // ๊ธฐ๋ณธ์ƒ์„ฑ์ž์—์„œ๋„ super๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ ๊ฐ€๋Šฅ
    public MyException() {
        super("MyException ์˜ˆ์™ธ");
    }

    // Exception๋ฐœ์ƒ ์‹œ ๋ฉ”์‹œ์ง€๋ฅผ ๋„ฃ๊ณ ์‹ถ์Œ
    public MyException(String message) {
        super(message);
    }
}

์‹คํ–‰๊ฒฐ๊ณผ


๐Ÿš€์‹ค์Šต - ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๊ฐ์ฒด ํ™œ์šฉ - ๊ฐ„๋‹จํ•œ ์€ํ–‰ ํ”„๋กœ๊ทธ๋žจ

  • ํ†ต์žฅ ๊ฐ์ฒด
  • ์ถœ๊ธˆํ•˜๋‹ค() : ์ž”์•ก๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธˆ์•ก์ด ์ถœ๊ธˆ๋˜๋ฉด ์˜ˆ์™ธ๋ฐœ์ƒ (ex. BankException (์‚ฌ์šฉ์ž์ •์˜์˜ˆ์™ธ๊ฐ์ฒด))
  • ์ž…๊ธˆํ•˜๋‹ค()

<Accountํด๋ž˜์Šค> - ํ†ต์žฅ, ๊ณ„์ขŒ ํด๋ž˜์Šค

private static int money; // ๊ณ„์ขŒ ์ž”์•ก

public int getMoney() {
    return money;
}

// ์ƒ์„ฑ๋ ๋•Œ ๋žœ๋คํ•œ ๊ณ„์ขŒ ์ž”์•ก์„ ์„ค์ •ํ•˜๋„๋ก ํ•จ
public Account() {
    randomAccountMoney();
}

// 10000์›๋ถ€ํ„ฐ 99000์›๊นŒ์ง€ ๊ณ„์ขŒ ์ž”์•ก์„ ๋žœ๋คํ•˜๊ฒŒ ์„ค์ •
public static void randomAccountMoney(){
    money = ((int)(Math.random()*99+10)) * 1000;
}
  • Getter๋ฉ”์†Œ๋“œ๋กœ money๋ฅผ ๊ณ„์ขŒ ์ž”์•ก์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
  • Math.random()์„ ์ด์šฉํ•˜์—ฌ 10~99๊นŒ์ง€ ๋ฝ‘๊ณ  ๊ทธ๊ฐ’์„ ์ •์ˆ˜ํ˜•๋ณ€ํ™˜ ํ•œ ํ›„ 1000์„ ๊ณฑํ•˜์—ฌ 10000~99000๊นŒ์ง€์˜ ๋žœ๋คํ•œ 
    ๊ณ„์ขŒ ์ž”์•ก์„ ๋งŒ๋“ค์–ด๋ƒ„

<main()> - ์ž…๊ธˆ, ์ถœ๊ธˆ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ๋‹ด๋‹น

// ์ž…๊ธˆํ•˜๋‹ค()
public static void deposit(int money) throws Exception{
    if(money < 0){ // ์ž…๊ธˆํ•  ๊ธˆ์•ก์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        throw new BankException("[์Œ์ˆ˜์ž…๋ ฅ] : ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฐ’์ž…๋‹ˆ๋‹ค.");
    }
    System.out.println("์ž…๊ธˆ ์ „ ์ž”์•ก : " + userRandomMoney);
    System.out.println("์ž…๊ธˆ ํ›„ ์ž”์•ก : " + (userRandomMoney+money));
}
// ์ถœ๊ธˆํ•˜๋‹ค()
public static void withdrawal(int money) throws Exception{
    if(userRandomMoney < money){ // ์ถœ๊ธˆํ•  ๊ธˆ์•ก์ด ๊ณ„์ขŒ์ž”์•ก๋ณด๋‹ค ๋งŽ์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        throw new BankException("์ž”์•ก์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค");
    }
    System.out.println("์ถœ๊ธˆ ์ „ ์ž”์•ก : " + userRandomMoney);
    System.out.println("์ถœ๊ธˆ ํ›„ ์ž”์•ก : " + (userRandomMoney-money));
}
  • ์ž…๊ธˆ์— ์Œ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด BankException์„ ๋ฐœ์ƒ์‹œํ‚ด
  • userRandomMoney๋กœ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€์„œ ์ž…๋ ฅ๋ฐ›์€ money๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ์ฐจ๊ฐ
  • ์ถœ๊ธˆ์— ๊ณ„์ขŒ ์ž”์•ก๋ณด๋‹ค ์ถœ๊ธˆ ๊ธˆ์•ก์ด ๋งŽ์„ ๊ฒฝ์šฐ BankException์„ ๋ฐœ์ƒ์‹œํ‚ด

<BankException ํด๋ž˜์Šค> - ์€ํ–‰๊ด€๋ จ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ (์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ)

public class BankException extends Exception{
    public BankException() {
        super("[์€ํ–‰] ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
    }

    public BankException(String message) {
        super(message);
    }
}

 

<main()> - ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”๋‰ด๋ฅผ ์ž…๋ ฅ๋ฐ›์Œ

int userMenu = sc.nextInt();
switch (userMenu){
    case 1: // ์ž…๊ธˆ ์‹œ์Šคํ…œ ์ „๋‹ฌ
        System.out.print("์–ผ๋งˆ๋ฅผ ์ž…๊ธˆํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? : ");
        try{
            deposit(sc.nextInt());
        }catch(Exception e){
            e.printStackTrace();
        }
        break outter;

    case 2: // ์ถœ๊ธˆ ์‹œ์Šคํ…œ ์ „๋‹ฌ
        System.out.print("์–ผ๋งˆ๋ฅผ ์ถœ๊ธˆํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? : ");
        try{
            withdrawal(sc.nextInt());
        }catch(Exception e){
            e.printStackTrace();
        }
        break outter;

    default: // ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฉ”๋‰ด ์ž…๋ ฅ
        System.out.println("๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
}
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”๋‰ด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ switch๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌ
  • ๊ฐ๊ฐ์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋ณด๋‚ด๊ณ , try-catch๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•จ

์‹คํ–‰๊ฒฐ๊ณผ - ์ž…๊ธˆ
์‹คํ–‰๊ฒฐ๊ณผ - ์ถœ๊ธˆ
์‹คํ–‰๊ฒฐ๊ณผ - ์ž…๊ธˆ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
์‹คํ–‰๊ฒฐ๊ณผ - ์ถœ๊ธˆ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

๐Ÿš€ ์ด๋ฒˆ ๊ฐ„๋‹จํ•œ ์€ํ–‰ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‹ค์Šตํ•ด๋ณด๋ฉฐ, ์ž…๊ธˆ, ์ถœ๊ธˆ ๊ธฐ๋Šฅ๋ง๊ณ ๋„ ๊ณ„์ขŒ ์ƒ์„ฑ, ๊ณ„์ขŒ ํ™•์ธ, ์ž”์•ก ํ™•์ธ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๋ณต์žกํ•œ ๋กœ์ง์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—ฐ๋™๋˜์ง€ ์•Š์€ ์ด์ƒ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์•ˆ์— ๋ฐ์ดํ„ฐ๋“ค์ด ๋‹ด๊ธฐ๊ณ , ์ข…๋ฃŒ๋  ๋•Œ ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๋ฏ€๋กœ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™ํ•˜์—ฌ ์€ํ–‰ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๋ฐฐ์›Œ์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๊ฐ„๋‹จํ•œ ์ž…๊ธˆ, ์ถœ๊ธˆ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์€ํ–‰ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด์ง€๋งŒ ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์—ฌ ์Œ์ˆ˜์ž…๋ ฅ, ์ž”์•ก๋ถ€์กฑ ๋“ฑ์˜ Exception๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.


โ“์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

  • ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ์  ์ค‘๋‹จ
  • ๋ฐ์ดํ„ฐ์†์‹ค
  • ๋ณด์•ˆ ์ทจ์•ฝ์ 
  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ €ํ•˜
  • ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€

<๋‹ค์–‘ํ•œ ์˜ˆ์™ธ>

= ์ž๋ฐ”๊ฐ€ ๋ฏธ๋ฆฌ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค
java.langํŒจํ‚ค์ง€์™€ java.ioํŒจํ‚ค์ง€์— ๋Œ€๋ถ€๋ถ„ ํฌํ•จ

โ“Error์™€ ์„œ๋ธŒํด๋ž˜์Šค

  • ์ด ์—๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.
  • ์—๋Ÿฌ์™€ ์˜ˆ์™ธ๋Š” ๋‹ค๋ฅด๋‹ค. ์—๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์˜ˆ์™ธ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋Œ€์ฒ˜๊ฐ€๋Šฅ
  • OutOfMemoryError : JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์‹œ ๋ฐœ์ƒ
  • StackOverflowError : ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ (๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์ด ๊นŠ์ด ๋„ˆ๋ฌด ๋งŽ์ด ์ค‘์ฒฉ๋˜์—ˆ์„๋–„์‚ฌ์šฉ)

<JDK์—์„œ์˜ ์˜ˆ์™ธ ๋– ๋„˜๊ธฐ๊ธฐ ์‚ฌ๋ก€>

  • java.io.InputStream์˜ read()๋ฉ”์†Œ๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”
    IOException์„ ๋– ๋„˜๊น€ (ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ, ์ฝ๊ธฐ ๊ถŒํ•œ ์—†์Œ ๋“ฑ)

  • java.net.Socket์˜ ์ƒ์„ฑ์ž ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ๊ณผ ๊ด€๋ จ๋œ Socketํด๋ž˜์Šค๋„ ์˜ˆ์™ธ๋ฅผ ๋– ๋„˜๊น€
    Socket์˜ ์ƒ์„ฑ์ž๋Š” ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ์™€ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์†Œ์ผ“์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋ฉฐ
    ์ด ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ UnknowHostException๊ณผ IOException์„ ๋– ๋„˜๊น€
public Socket(String host, int port) throws UnknownHostException, IOException;
  • ์ด๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋‚˜ ์ž…/์ถœ๋ ฅ ๋ฌธ์ œ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ ์ œ๊ณต

โ“์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ, ์˜ˆ์™ธ๋ฐœ์ƒ, ์˜ˆ์™ธ ๋– ๋„˜๊ธฐ๊ธฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋Š” ์ž๋ฐ”๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ ์˜ˆ์™ธ๋“ค๋กœ๋Š” ํŠน์ •์ƒํ™ฉ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šธ๋•Œ,
    ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ๋” ๊ตฌ์ฒด์ ์ด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌ ๊ฐ€๋Šฅ

  • ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์ด๋‚˜ ์กฐ๊ฑด์„ ๋งŒ๋‚ฌ์„๋•Œ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ
    ํŠน์ • ์กฐ๊ฑด์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ค‘๋‹จ ๋ฐ ๋ฌธ์ œ๋ฅผ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Œ

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

โ“์ž๋™ ๋ฆฌ์†Œ์Šค ๋‹ซ๊ธฐ

  • 1. ์ผ๋ฐ˜์ ์œผ๋กœ finally์•ˆ์—์„œ try-catch๋ฌธ ์ฒ˜๋ฆฌ๋กœ ๋‹ซ์•„์ฃผ๋Š” ์˜ˆ์ œ
// ์ž๋™๋ฆฌ์†Œ์Šค ๋‹ซ๊ธฐ ์˜ˆ์ œ
// 1) ์ผ๋ฐ˜ finally์—์„œ try-catch๋ฌธ ์‚ฌ์šฉ
public class ExceptionFinally01 {
    public static void main(String[] args) {
        // ์—ฐ๊ฒฐํ•˜๋ฉด, ๋ฐ˜๋“œ์‹œ ๋‹ซ์•„์•ผํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š” = FildInputStream ๋“ฑ
        // ๋ฐ˜๋“œ์‹œ ๋‹ซ์•„์•ผํ•˜๋Š” ๊ธฐ๋Šฅ์€ finally์—์„œ ๊ธฐ๋Šฅ
        FileInputStream fis = null;

				System.out.println("-----1๋ฒˆ๋ฐฉ๋ฒ• ๋ธ”๋ก start");
        try{
            fis = new FileInputStream("abc");
        }catch (Exception e){
            System.out.println(e);
        }finally{ // finally์—์„œ๋„ try-catch๋ธ”๋ก์„ ํ†ตํ•ด ๋ฐ˜๋“œ์‹œ ๋‹ซ๋Š” ๊ธฐ๋Šฅ close()๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ 
                    // ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก IOException์„ ๋ฐœ์ƒํ•˜๋Š” e๋ฅผ catch๋ฌธ์— ์ž‘์„ฑ
            try{
                fis.close();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
 				System.out.println("-----1๋ฒˆ๋ฐฉ๋ฒ• ๋ธ”๋ก end");
    }
}

 

  • 2. โญJava 7๋ถ€ํ„ฐ ์ œ๊ณตํ•˜๋Š” try-with-resources๋ผ๋Š” ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™๋ฆฌ์†Œ์Šค ๋‹ซ๊ธฐ
// ์—ฐ๊ฒฐํ•˜๋ฉด, ๋ฐ˜๋“œ์‹œ ๋‹ซ์•„์•ผํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š” = FildInputStream ๋“ฑ
FileInputStream fis = null;

System.out.println("-----2๋ฒˆ๋ฐฉ๋ฒ• ๋ธ”๋ก start");
// ์ด ๋ฆฌ์†Œ์Šค๋ฅผ ์“ธ๊ฒƒ์ž„์„ try()์•ˆ์— ๋ฐ”๋กœ ์„ ์–ธ
try(FileInputStream fis2 = new FileInputStream("abc")){

}catch(Exception e){
    e.printStackTrace();
}
System.out.println("-----2๋ฒˆ๋ฐฉ๋ฒ• ๋ธ”๋ก end");

// ์ด๊ตฌ๋ฌธ์€ finally๋กœ ๋‹ซ์•„์ค€ ๊ตฌ๋ฌธ๊ณผ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•จ

์ด ๊ตฌ๋ฌธ์€ try( ) ์•ˆ์— ๋งŒ๋“ค์–ด์ง„ ๋ฆฌ์†Œ์Šค๋“ค์€ finally์—์„œ ์ž๋™์œผ๋กœ close์‹œ์ผœ์ค€๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

โญ1๋ฒˆ๋ฐฉ๋ฒ•์˜ ๋ธ”๋ก๊ณผ 2๋ฒˆ๋ฐฉ๋ฒ•์˜ ๋ธ”๋ก์€ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์„ํ•œ๋‹ค.
1๋ฒˆ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ซ๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆฌ๋Š” ์‹ค์ˆ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด
2๋ฒˆ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

๐Ÿ’ก์ด 2๋ฒˆ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” (try-with-resources)

๋ฆฌ์†Œ์Šค ๊ฐ์ฒด๊ฐ€ AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜๊ณ ,
๋Œ€๋ถ€๋ถ„์˜ Javaํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฆฌ์†Œ์Šค ํด๋ž˜์Šค๋“ค์€ โญโญ์ด๋ฏธ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.
์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด ์ด ํƒ€์ž…์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†๋‹ค.

์˜ˆ๋กœ FileInputStream API๋ฅผ ๊ฐ€๋ณด๋ฉด

FileInputStream API

Implements์—์„œ AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ณ ,
์ด AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋Š” 1.7 ๋ถ€ํ„ฐ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

AutoCloseable API


โ“์˜ˆ์™ธ์ •๋ณด์–ป๊ธฐ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์›์ธ๊ณผ ์ƒํ™ฉ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ  ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ฒŒํ•จ
  • ์ •ํ™•ํ•œ ๋””๋ฒ„๊น… : ์˜ˆ์™ธ์ •๋ณด์—๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ฝ”๋“œ ์œ„์น˜ (ํŒŒ์ผ๋ช…, ๋ผ์ธ ๋ฒˆํ˜ธ ๋“ฑ)๊ฐ€ ํฌํ•จ๋จ
  • ํšจ์œจ์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ : ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ๋ฉ”์‹œ์ง€๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ,
    ์˜ˆ๋กœ NullPointerException์€ ๊ฐ์ฒด๊ฐ€ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ์ดˆ๊ธฐํ™”์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

 

<์˜ˆ์™ธ์ถœ๋ ฅ ๋ฉ”์†Œ๋“œ>

โ“getStackTrace()

์˜ˆ์™ธ๋ฐœ์ƒ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
๐Ÿ’ก(”์˜ˆ์™ธ ๋ฐœ์ƒ ์œ„์น˜ : “+ e.getStackTrace()[0]);


โ“printStackTrace()

์˜ˆ์™ธ๋ฐœ์ƒ ๋ฉ”์‹œ์ง€์™€ ์œ„์น˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿš€์ด ํ›„ ๋‚จ์€ ์‹œ๊ฐ„์—๋Š”
์€ํ–‰ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ์ฒ˜์Œ์—๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์•„์„œ

๋‹จ์ˆœํžˆ ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ์ž…๋ ฅ๊ฐ’์ด ์•„๋‹ ๊ฒฝ์šฐ์—๋Š” while๋ฌธ์„ ํ†ตํ•ด ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์ž…๋ ฅ๋ ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ๋ฐ˜๋ณต ์‹œ์ผฐ๋‹ค๋ฉด

์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋ฐฐ์šฐ๊ณ ๋‚˜์„œ๋Š” ์–ด๋А์ •๋„ try-catch๋ฌธ์œผ๋กœ ๋ฌถ์–ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ ๋‹ค.

์•„์ง๊นŒ์ง€ ์ด ์€ํ–‰ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๋„ฃ๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋‹ค.

์ž…๊ธˆ / ์ถœ๊ธˆ / ๊ณ„์ขŒ๋“ฑ๋ก / ๊ณ„์ขŒํ™•์ธ / ์ด๋ฆ„ ์ค‘๋ณต ๊ธˆ์ง€ ๋“ฑ ๊ฐ–๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋‹ˆ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ์ผ๋‹จ ์ œ๊ปด๋‘๊ณ  ๊ตฌํ˜„์—๋งŒ ํž˜์“ฐ๊ณ ์žˆ์—ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„์ด ๋ง‰๋ฐ”์ง€๋ ๋•Œ์ฏค ์˜ˆ์™ธ๋ฅผ ๋„ฃ์–ด๊ฐ€๋ฉฐ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.


๐Ÿ’ก 9์ผ์ฐจ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด์„œ ๋‹ค์–‘ํ•˜๊ณ  ๊นŠ๊ฒŒ ๋ฐฐ์šฐ๊ณ , ์€ํ–‰ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ๊ธฐ๋Šฅ๊ตฌํ˜„๊ณผ ํ•จ๊ป˜ ๊ฐœ๋ฐœํ•ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋จธ๋ฆฟ์†์—์„œ ๊ฐ‘์ž๊ธฐ ์ƒ๊ฐ๋‚˜์„œ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•œ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋Šฅ๋“ค์€ ํ•œ ์ค„ ํ•œ ์ค„ ์ฝ”๋“œ๊ฐ€ ์ž˜ ์จ์กŒ๋Š”๋ฐ

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

์ด๋ฒˆ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋А๋‚€๊ฑด ํ•˜๋‚˜ํ•˜๋‚˜ ์˜ค๋ฅ˜ ์žก์•„๊ฐ€๋ฉด์„œ ์™„์„ฑ์‹œ์ผœ์•ผ๊ฒ ๋‹ค๋Š” ์˜์ง€๊ฐ€ ์ƒ๊ฒผ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!๐Ÿš€