✏️ TIL

유데미 μ·¨μ—…λΆ€νŠΈμΊ ν”„ - ν”„λ‘ νŠΈμ—”λ“œ&λ°±μ—”λ“œ : 25일차 TIL

Yuuuki 2024. 1. 20. 19:18

μ˜ˆμ™Έμ²˜λ¦¬

 

μ˜ˆμ™Έμ²˜λ¦¬μ˜ μž₯점

 

μžλ°” ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” μ˜ˆμ™Έ 상황이 λ°œμƒν•˜λ©΄, μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€. 특히 unchecked exception 같은 μ˜ˆμ™ΈλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ°œμƒλ˜λŠ” μ˜ˆμ™ΈμΈλ°, μ„œλΉ„μŠ€κ°€ μ •μƒμ μœΌλ‘œ μš΄μ˜μ€‘μ΄λ‹€κ°€λ„ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œμ„ΈμŠ€κ°€ κ°•μ œμ μœΌλ‘œ μ’…λ£Œλ©λ‹ˆλ‹€.

λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ μΈ μš΄μ˜μ— μžˆμ–΄μ„œ μ˜ˆμ™ΈλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ˜ˆμ™Έμ μΈ 상황은 μ˜ˆμ™Έμ²˜λ¦¬(Exception Handling)λ₯Ό 톡해 ν”„λ‘œμ„ΈμŠ€κ°€ κ°•μ œμ μœΌλ‘œ μ’…λ£Œλ˜μ§€ μ•Šκ³  μ˜ˆμ™Έ 상황이 λ°œμƒν•΄λ„ 운영이 κ°€λŠ₯ν•˜λ„λ‘ 핸듀링을 ν•  μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

try, catch

try {

    μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κΈΈ μ›ν•˜λŠ” μ‹€ν–‰ μ½”λ“œ;

} catch (e1) {

    e1 μ˜ˆμ™Έκ°€ λ°œμƒν•  κ²½μš°μ— 싀행될 μ½”λ“œ;

} catch (e2) {

    e2 μ˜ˆμ™Έκ°€ λ°œμƒν•  κ²½μš°μ— 싀행될 μ½”λ“œ;

}

...

finally {

    μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 무쑰건 싀행될 μ½”λ“œ;

}

 

βœ“ try 블둝 : 기본적으둜 맨 λ¨Όμ € μ‹€ν–‰λ˜λŠ” μ½”λ“œλ‘œ μ—¬κΈ°μ—μ„œ λ°œμƒν•œ μ˜ˆμ™ΈλŠ” catch λΈ”λ‘μ—μ„œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

βœ“ tcatch 블둝 : try λΈ”λ‘μ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έ μ½”λ“œλ‚˜ μ˜ˆμ™Έ 객체λ₯Ό 인수둜 전달받아 κ·Έ 처리λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

βœ“ tfinally 블둝 : 이 블둝은 try λΈ”λ‘μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜κ±΄ μ•ˆ ν•˜κ±΄ 맨 λ§ˆμ§€λ§‰μ— 무쑰건 μ‹€ν–‰λ©λ‹ˆλ‹€.

 

 

catch 블둝과 finally 블둝은 선택적인 μ˜΅μ…˜μœΌλ‘œ λ°˜λ“œμ‹œ μ‚¬μš©ν•  ν•„μš”λŠ” μ—†λ‹€.

 

 

Exception 클래슀

λͺ¨λ“  μ˜ˆμ™Έ ν΄λž˜μŠ€λŠ” Exception 클래슀λ₯Ό μƒμ†λ°›κ±°λ‚˜ Exception 클래슀의 ν•˜μœ„ ν΄λž˜μŠ€μ— μ†ν•˜λ©°, 주둜 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 일반적인 μ˜ˆμ™Έ 클래슀λ₯Ό μœ„ν•œ λΆ€λͺ¨ 클래슀둜 μ‚¬μš©λ©λ‹ˆλ‹€.

 

 

 

throw

μ˜ˆμ™Έλ₯Ό κ°•μ œλ‘œ λ°œμƒμ‹œν‚€λŠ” ν‚€μ›Œλ“œλ‘œ, κ°œλ°œμžκ°€ νŠΉμ • μ‘°κ±΄μ΄λ‚˜ μƒν™©μ—μ„œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œμΌœμ•Ό ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

throwλ₯Ό μ‚¬μš©ν•˜λ©΄ μ˜ˆμ™Έλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μƒμ„±ν•˜κ³ , 이λ₯Ό try-catch λΈ”λ‘μ—μ„œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

public class CustomException extends Exception {
    // μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 클래슀 μ •μ˜
    public CustomException(String message) {
        super(message);
    }
}

public class Example {
    public static void main(String[] args) {
        try {
            // μ–΄λ–€ μ‘°κ±΄μ—μ„œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€κ³ μž ν•  λ•Œ throw μ‚¬μš©
            throw new CustomException("μ΄λŠ” μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έμž…λ‹ˆλ‹€.");
        } catch (CustomException e) {
            // μ˜ˆμ™Έ 처리
            System.out.println("μ˜ˆμ™Έ λ©”μ‹œμ§€: " + e.getMessage());
        }
    }
}

 

 

throwλŠ” μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” ν‚€μ›Œλ“œμž…λ‹ˆλ‹€.

throw λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ”, μ˜ˆμ™Έ 클래슀 객체λ₯Ό λ§Œλ“€μ–΄μ£Όκ³  throw 둜 μ˜ˆμ™Έλ₯Ό κ°•μ œμ μœΌλ‘œ λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.

throws λŠ” μ˜ˆμ™Έλ₯Ό λ– λ„˜κΈ°λŠ” λ°©λ²•μœΌλ‘œ μ–΄λ– ν•œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ κ·Έ λ©”μ„œλ“œκ°€ throws ν‚€μ›Œλ“œλ‘œ μ •μ˜κ°€ λ˜μ–΄ 있으면, ν•΄λ‹Ή λ©”μ„œλ“œλŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ κ³³μ—μ„œ κ°•μ œμ μœΌλ‘œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. κ°•μ œμ μœΌλ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  throws 둜 μ˜ˆμ™Έλ₯Ό λ‹€μ‹œ λ– λ„˜κ²¨λ„ λ˜λ‚˜, ν•΄λ‹Ή 방법은 μ’‹μ§€ μ•Šμ€ λ°©λ²•μž…λ‹ˆλ‹€!

μ˜ˆμ™Έλ₯Ό λ‹€μ‹œ λ– λ„˜κΈ°κ²Œ λœλ‹€λ©΄ 비정상 μ’…λ£Œκ°€ λ˜λ©΄μ„œ 이 μ˜ˆμ™ΈλŠ” JVMμ—κ²Œ λ„˜κ²¨μ§€κ²Œ λ©λ‹ˆλ‹€. JVM이 λ°›μ•„μ„œ JVM κΈ°λ³Έ μ˜ˆμ™Έμ²˜λ¦¬κΈ°μ— μ˜ν•΄ λ§ˆμ§€λ§‰μœΌλ‘œ 처리λ₯Ό ν•˜κ²Œ λ˜μ–΄ 였λ₯˜λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. throws λŠ” μ˜ˆμ™Έλ₯Ό λ– λ„˜κΈ°λŠ” 것 뿐이지, μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. λ– λ„˜κΈ΄ κ³³κΉŒμ§€ 처리λ₯Ό ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— JVM 은 였λ₯˜λ₯Ό λ±‰μŠ΅λ‹ˆλ‹€. ν•˜μ—¬ μ˜ˆμ™Έ μ²˜λ¦¬κ°€ 될 수 μžˆλ„λ‘ ν•˜λ €λ©΄ try catch 문으둜 처리λ₯Ό ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.