πŸ“š μ°Έκ³ ν•œ μ±…

 

: 좜처 예슀24 ν™ˆνŽ˜μ΄μ§€

 

 

 

- 기본적인 κ°œλ…μ„ μ •λ¦¬ν•˜κ³  μΆ”κ°€μ μœΌλ‘œ κΆκΈˆν•œ 것듀을 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€ -

 

 

πŸ₯ πŸ₯ πŸ₯

 


 

βœ”οΈ   μ˜ˆμ™Έμ²˜λ¦¬_ 467p

 

try

: μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆλŠ” μ½”λ“œκ°€ ν¬ν•¨λ˜μ–΄μžˆλ‹€.

 

catch

: μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œ μ²˜λ¦¬ν•  μ½”λ“œκ°€ ν¬ν•¨λœλ‹€.

 

finally

: μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ“ , λ°œμƒν•˜μ§€ μ•Šλ“  항상 μ‹€ν–‰λ˜λŠ” λΈ”λ‘μœΌλ‘œ, 일반적으둜 λ¦¬μ†ŒμŠ€ ν•΄μ œλ‚˜ try{ }, catch{ }의 곡톡 κΈ°λŠ₯ μ½”λ“œκ°€ ν¬ν•¨λ˜μ–΄μžˆλ‹€.

 

try {
    int a = 10 / 0;
}

catch (Exception e) {
    System.out.println("μ˜ˆμ™Έ λ°œμƒ!");
}

catch (ArithmeticException e) {
    System.out.println("0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€!");
}

finally {
    System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ₯˜");
}
tryλŠ” μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆλŠ” μ½”λ“œλ₯Ό λ‹΄κ³  μžˆλ‹€. ν•΄λ‹Ή μ½”λ“œμ—μ„  ArithmeticExceptionμ΄λž€ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¨λ‹€. catchλŠ” μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” 방식을 λ‚˜νƒ€λ‚΄λŠ”λ° μ—¬λŸ¬ 개λ₯Ό μ •μ˜ν•  수 μžˆλ‹€. tryμ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ 그에 λ§žλŠ” μ²˜λ¦¬λ°©λ²•μ„ μ°ΎκΈ° μœ„ν•΄ 첫번째 catchλΆ€ν„° finallyλ₯Ό ν–₯ν•΄ λ‚΄λ €κ°„λ‹€.

그런데 μœ„μ˜ μ½”λ“œλŠ” μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” κ³Όμ •μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€. λͺ¨λ“  μ˜ˆμ™ΈλŠ” Exception 클래슀의 ν•˜μœ„ 클래슀둜 μ–΄λ–€ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ“  첫번째 catch λΈ”λ‘λ§Œ μ‹€ν–‰λ˜λ―€λ‘œ λ‘λ²ˆμ§Έ catch 블둝에 도달할 수 μ—†λŠ” μ½”λ“œκ°€ λœλ‹€. κ·Έλž˜μ„œ unreachable code 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

 

λͺ¨λ“  μ˜ˆμ™ΈλŠ” Exception의 ν•˜μœ„ν΄λž˜μŠ€λ‹€.

 

 

try {
    int a = 10 / 0;
}

catch (ArithmeticException e) {
    System.out.println("0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€!");
}

catch (Exception e) {
    System.out.println("μ˜ˆμ™Έ λ°œμƒ!");
}

finally {
    System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ₯˜");
}
μˆœμ„œλ₯Ό λ°”κΏ”μ£Όλ©΄ 였λ₯˜κ°€ ν•΄κ²°λ˜μ–΄ μ˜ˆμ™Έ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•΄μ§„λ‹€.

 

 

 

닀쀑 μ˜ˆμ™Έ 처리

public class TryCatchPratice1 {
    public static void main(String[] args) {
    
        try {
            System.out.println(10 / 0); 
        } catch (ArithmeticException e) {
            System.out.println("0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€.");
        } finally {
            System.out.println("ν”„λ‘œκ·Έλž¨μ„ μ’…λ₯˜ν•©λ‹ˆλ‹€.");
        }    

        try {
            int[] arr = new int[3];
            System.out.println(arr[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("λ°°μ—΄ 인덱슀 λ²”μœ„λ₯Ό λ²—μ–΄λ‚¬μŠ΅λ‹ˆλ‹€.");
        } finally {
            System.out.println("ν”„λ‘œκ·Έλž¨μ„ μ’…λ₯˜ν•©λ‹ˆλ‹€.");
        }    
    }
}
첫번째 tryμ—μ„œλŠ” 0으둜 λ‚˜λˆ„λŠ” 것이 λΆˆκ°€λŠ₯ν•˜μ—¬ ArithmeticException μ˜ˆμ™Έ μ²˜λ¦¬λ°©λ²•μ„ λ’€λ‹€. λ‘λ²ˆμ§Έ tryμ—μ„œλŠ” λ°°μ—΄μ˜ 크기가 3μž„μ—λ„ κ·Έ 이상에 μžˆλŠ” 배열을 좜λ ₯μ‹œν‚€λ©° λ°œμƒν•œ 인덱슀 λ²”μœ„ 였λ₯˜ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν–ˆλ‹€. finally의 경우 μ€‘λ³΅λ˜μ–΄ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆλ‹€.

 

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException e) {
            System.out.println("0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€.");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("λ°°μ—΄ 인덱슀 λ²”μœ„λ₯Ό λ²—μ–΄λ‚¬μŠ΅λ‹ˆλ‹€.");
        } finally {
            System.out.println("ν”„λ‘œκ·Έλž¨μ„ μ’…λ₯˜ν•©λ‹ˆλ‹€.");
        }    
    }
}
ν•˜λ‚˜μ˜ try 블둝 μ•ˆμ— μ—¬λŸ¬ μ˜ˆμ™Έλ₯Ό λ„£κ³  catch둜 μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 훨씬 κ°„κ²°ν•œ μ½”λ“œκ°€ μ™„μ„±λœλ‹€. try 블둝에 μžˆλŠ” μ˜ˆμ™Έ μ½”λ“œλŠ” catch λΈ”λ‘μ˜ μˆœμ„œμ™€ 연관없이 μ•Œμ•„μ„œ μž‘μ„±ν•΄μ£Όλ©΄ λœλ‹€. try와 catch에 μ€‘λ³΅λœ μ½”λ“œκ°€ μžˆμ„ 경우, finally에 적어 쀑볡을 ν”Όν•  수 μžˆλ‹€.

 

 

 

 λ‹€μ€‘ μ˜ˆμ™Έλ₯Ό ν•œ λΈ”λ‘μ—μ„œ μ²˜λ¦¬ν•˜λŠ” 방법

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
            System.out.println("μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.");
        } finally {
            System.out.println("ν”„λ‘œκ·Έλž¨μ„ μ’…λ₯˜ν•©λ‹ˆλ‹€.");
        }    
    }
}
ν•˜λ‚˜μ˜ catch λΈ”λ‘μ—μ„œ 두 개의 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€. 그럴 경우 |(OR)을 μ‚¬μš©ν•˜μ—¬ λ‚˜νƒ€λ‚΄λ©΄ λœλ‹€.

 

 

 

 


 

 

 

βœ”οΈ   λ¦¬μ†ŒμŠ€ ν•΄μ œ_ 477p

 

λ¦¬μ†ŒμŠ€ ν•΄μ œ

: λ”이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μžμ›μ„ λ°˜λ‚©ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

InputStreamReaderλ₯Ό μ΄μš©ν•˜μ—¬ λ¦¬μ†ŒμŠ€ μžλ™ ν•΄μ œ

try (InputStreamReader isr1 = new InputStreamReader (System.in);) {
    char input = (char) isr1.read();
    System.out.println("μž…λ ₯ κΈ€μž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}

try (InputStreamReader isr2 = new InputStreamReader (System.in);) {
    char input = (char) isr2.read();
    System.out.println("μž…λ ₯ κΈ€μž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
InputStreamReaderμ—λŠ” AutoCloseable을 κ΅¬ν˜„ν•˜κ³  μžˆλ‹€. try의 κ΄„ν˜Έ μ•ˆμ— μ„ μ–Έλœ 객체가 μ˜ˆμ™Έ 처리 ꡬ문의 싀행이 λλ‚˜λ©΄ μžλ™μœΌλ‘œ close( ) ν˜ΈμΆœν•΄ λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•œλ‹€. 

그런데 μœ„μ˜ μ½”λ“œλŠ” 첫번째 try λΈ”λ‘μ—μ„œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό 마치고 λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν–ˆλ‹€. 그러면 κ·Έ λ‹€μŒ try 블둝은 μ–΄λ–»κ²Œ μ§„ν–‰λ˜λŠ”κ±ΈκΉŒ. System.in은 μ½˜μ†” μž…λ ₯을 μ²˜λ¦¬ν•˜λŠ” λ¦¬μ†ŒμŠ€λ‘œ μžλ°” 가상 머신이 단 ν•˜λ‚˜μ˜ 객체λ₯Ό 생성해 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— 이λ₯Ό λ°˜λ‚©ν•˜λ©΄ 더이상 μ½˜μ†”μ„ μž…λ ₯ν•  수 μ—†κ²Œλœλ‹€. κ·ΈλŸ¬λ―€λ‘œ 첫번째 try λΈ”λ‘μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό λ°˜λ‚©ν•΄μ„œ λ‹€μŒ try 블둝은 μ‚¬μš©ν•  수 μ—†κ²Œλœλ‹€.

 

 

 

 μ§μ ‘ closeλ₯Ό μ„€μ •ν•˜μ—¬ λ¦¬μ†ŒμŠ€ μˆ˜λ™ ν•΄μ œ

A a1 = null;

try {
    a1 = new A("νŠΉμ • 파일")
}

catch (Exception e) {
    System.out.println("μ˜ˆμ™Έ 처리");
}

finally {
    if(a1.resource!=null) {
        try{
            a1.close();
        } catch (Exception e) {
        }
    }
}
finally에 직접 close( )λ₯Ό μ •μ˜ν•œλ‹€. finally에 μ •μ˜ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, 클래슀 A에 AutoCloseable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€. AutoCloseable 내뢀에 close( ) λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆκΈ°μ— finally에 직접 μ •μ˜ν•˜μ§€ μ•Šμ•„λ„, λ¦¬μ†ŒμŠ€λ₯Ό μ•Œμ•„μ„œ ν•΄μ œν•  것이닀.

 

 

 

 


 

 

 

βœ”οΈ   μ˜ˆμ™Έμ „κ°€_ 485p

 

μ˜ˆμ™Έ μ „κ°€

: μ˜ˆμ™Έ 처리의 의무λ₯Ό ν˜ΈμΆœν•œ λ©”μ„œλ“œκ°€ μ˜ˆμ™Έλ₯Ό κ°–κ²Œ 되며, μƒμœ„μ˜ λ©”μ„œλ“œλ„ μžμ‹ μ„ ν˜ΈμΆœν•œ μ§€μ μœΌλ‘œ μ˜ˆμ™Έλ₯Ό μ „κ°€ν•  수 μžˆλ‹€.

 

throws

: μ˜ˆμ™Έ μ „κ°€ 문법이닀.

    public static void readFile() throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
        String line = reader.readLine();
        System.out.println("읽은 λ‚΄μš©: " + line);
        reader.close();
    }

    public static void main(String[] args) {
        try {
            readFile();
        } catch (IOException e) {
            System.out.println("νŒŒμΌμ„ μ½λŠ” 쀑 였λ₯˜ λ°œμƒ: " + e.getMessage());
        }
    }
readFile λ©”μ„œλ“œμ—μ„œ λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό IOException으둜 μ „κ°€λ˜μ—ˆμœΌλ©° λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ try-catch ꡬ문으둜 μ²˜λ¦¬ν•˜μ§€ μ•Šμ•˜λ‹€. λŒ€μ‹ , main λ©”μ„œλ“œμ—μ„œ readFile( )을 ν˜ΈμΆœν•  λ•Œ  try-catch둜 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•œλ‹€. μ˜ˆμ™Έ μ „κ°€λŠ” μœ„μ˜ μ½”λ“œμ²˜λŸΌ μ˜ˆμ™Έλ₯Ό μœ μ—°ν•˜κ²Œ 뢄리 μ‹œμΌœ λ‚˜μ€‘μ— μ²˜λ¦¬ν•˜λ„λ‘ ν•΄μ€€λ‹€.

μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  계속 μ „κ°€ν•˜κ²Œ 되면 μžλ°” 가상 머신이 직접 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κ²Œ λœλ‹€. μžλ°” 가상 λ¨Έμ‹ μ˜ μ˜ˆμ™Έ 처리 방법은 μš°λ¦¬κ°€ 잘 μ•„λŠ” 방법이닀. λ°œμƒν•œ μ˜ˆμ™Έμ˜ 정보λ₯Ό 화면에 좜λ ₯ν•œ λ’€ ν”„λ‘œκ·Έλž¨μ„ κ°•μ œ μ’…λ£Œν•˜λŠ” 것이닀.

μ˜ˆμ™Έ 전가도 λ‹€μ€‘μœΌλ‘œ 처리 κ°€λŠ₯ν•˜λ‹€. throws μ˜ˆμ™Έ 클래슀 A, μ˜ˆμ™Έ 클래슀 B... 둜 ν•œ λ²ˆμ— μ „κ°€ν•˜λ©΄ λœλ‹€.

 

 

 

 


 

 

 

βœ”οΈ   μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 클래슀_ 492p

 

μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 클래슀

: μžλ°”μ— 쑴재 ν•˜μ§€ μ•ŠλŠ” μ˜ˆμ™Έλ₯Ό 직접 μž‘μ„±ν•œλ‹€.

 

 μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 클래슀 μž‘μ„±

public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}
μƒμ„±μžμ—μ„œ messageλ₯Ό λ°›μ•„, μ˜ˆμ™Έ λ©”μ‹œμ§€λ₯Ό λΆ€λͺ¨μ—κ²Œ μ „λ‹¬ν•œλ‹€.

 

 

μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 객체 생성과 μ˜ˆμ™Έ 객체 λ˜μ§€κΈ°

throw new MyException("λ‚˜μ΄κ°€ λ„ˆλ¬΄ μ–΄λ €μ„œ κ°€μž…ν•  수 μ—†μŠ΅λ‹ˆλ‹€.");

 

 

 μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 객체 생성과 μ˜ˆμ™Έ 객체 λ˜μ§€κΈ°

public class Pratice01 {

    public static void checkAge(int age) throws MyException {
        if (age < 18) {
            throw new MyException("λ‚˜μ΄κ°€ λ„ˆλ¬΄ μ–΄λ €μ„œ κ°€μž…ν•  수 μ—†μŠ΅λ‹ˆλ‹€.");
        } else {
            System.out.println("κ°€μž…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.");
        }
    }

    public static void main(String[] args) {
        try {
            checkAge(15);
        } catch (MyException e) {
            System.out.println("μ˜ˆμ™Έ λ°œμƒ: " + e.getMessage());
        }
    }
}
18μ‚΄ μ΄ν•˜λ©΄ MyException μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ„λ‘ λ§Œλ“€μ—ˆλ‹€. try λΈ”λ‘μ—μ„œ 15λ₯Ό 인자둜 λ³΄λƒˆκ³  μ˜ˆμ™Έ MyException이 λ°œμƒν•΄ μ˜ˆμ™Έλ₯Ό λ˜μ‘Œλ‹€. catch κ΅¬λ¬Έμ—μ„œ λ°›μ•„ μ˜ˆμ™Έ λ°œμƒ 문ꡬλ₯Ό 좜λ ₯ν•œλ‹€.

 

 

 

 


 

 

 

βœ”οΈ   μ˜ˆμ™Έ 클래슀의 λ©”μ„œλ“œ_ 497p

 

getMassage( ) λ©”μ„œλ“œ

: μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œ μƒμ„±μžλ‘œ λ„˜κΈ΄ λ©”μ‹œμ§€λ₯Ό λ¬Έμžμ—΄ ν˜•νƒœλ‘œ λ¦¬ν„΄ν•˜λŠ” λ©”μ„œλ“œ

 throw new MyException("λ‚˜μ΄κ°€ λ„ˆλ¬΄ μ–΄λ €μ„œ κ°€μž…ν•  수 μ—†μŠ΅λ‹ˆλ‹€.");
System.out.println("μ˜ˆμ™Έ λ°œμƒ: " + e.getMessage());
λ‚˜μ΄κ°€ λ„ˆλ¬΄ μ–΄λ €μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆλ‹€. μ˜ˆμ™ΈλŠ” "λ‚˜μ΄κ°€ λ„ˆλ¬΄ μ–΄λ €μ„œ κ°€μž…ν•  수 μ—†μŠ΅λ‹ˆλ‹€."λΌλŠ” λ©”μ‹œμ§€λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€. ν•΄λ‹Ή λ©”μ‹œμ§€λŠ” μ˜ˆμ™Έ 객체λ₯Ό 생성할 λ•Œ μž…λ ₯λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λœλ‹€. 이 λ¬Έμžμ—΄μ€ getMassage( ) λ©”μ„œλ“œλ₯Ό 톡해 λ¦¬ν„΄ν•œλ‹€.

 

 

 

printStackTrace( ) λ©”μ„œλ“œ

μ˜ˆμ™Έ λ°œμƒμ΄ μ „λ‹¬λ˜λŠ” 경둜둜, μ˜ˆμ™Έ λ°œμƒ μ‹œ κ°œλ°œμžκ°€ 디버깅할 수 μžˆλ„λ‘ μ˜ˆμ™Έμ˜ 원인을 μžμ„Ένžˆ 좜λ ₯ν•œλ‹€.

try (InputStreamReader isr1 = new InputStreamReader(System.in)) {
    char input = (char) isr1.read();
    System.out.println("μž…λ ₯ κΈ€μž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
μ½˜μ†”μ— μ˜ˆμ™Έκ°€ μ–΄λ””μ—μ„œ μ „κ°€λ˜μ—ˆλŠ”μ§€ λ“± 좔적 정보λ₯Ό 좜λ ₯ν•œλ‹€.

 

+ Recent posts