[Java] Exception

λ‚˜λ₯΄Β·2021λ…„ 6μ›” 21일
0

JAVA

λͺ©λ‘ 보기
4/18
post-thumbnail

πŸ“– μ˜ˆμ™Έμ²˜λ¦¬(Exception)

μ˜ˆμ™ΈλŠ” error의 일쒅이며 ν”„λ‘œκ·Έλž¨μ΄ μˆ˜ν–‰μ‹œ λ˜λŠ” μ»΄νŒŒμΌμ‹œμ— 뢈λŠ₯μƒνƒœλ₯Ό μ•ΌκΈ°ν•©λ‹ˆλ‹€.

μœ„μ—μ„œ 보이듯 Error와 Exception의 μ°¨μ΄λŠ” ν”„λ‘œκ·Έλž¨μ΄ λ©ˆμΆ”μ–΄ λ²„λ¦¬λŠλƒ 계속 μ‹€ν–‰ν•  수 μžˆλŠλƒμ˜ μ°¨μ΄μž…λ‹ˆλ‹€. 더 μ •ν™•ν•˜κ²Œ λ§ν•˜λ©΄ ErrorλŠ” ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯을 μ£Όκ³ , Exception은 μ“°λ ˆλ“œμ—λ§Œ 영ν–₯을 μ€λ‹ˆλ‹€.

μ˜ˆμ™Έ μ²˜λ¦¬λž€ μ΄λŸ¬ν•œ μ˜ˆμ™Έκ°€ λ°œμƒν•  것을 λŒ€λΉ„ν•˜μ—¬ 미리 μ˜ˆμΈ‘ν•΄ 이λ₯Ό μ†ŒμŠ€μƒμ—μ„œ μ œμ–΄ν•˜κ³  μ²˜λ¦¬ν•˜λ„λ‘ λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ˜ˆμ™Έ 처리λ₯Ό ν•˜κ²Œλ˜λ©΄ κ°‘μž‘μŠ€λŸ¬μš΄ μ˜ˆμ™Έκ°€ λ°œμƒν•΄λ„ μ‹œμŠ€ν…œ 및 ν”„λ‘œκ·Έλž¨μ΄ 뢈λŠ₯μƒνƒœκ°€ λ˜μ§€ μ•Šκ³  정상 μ‹€ν–‰ μƒνƒœλ₯Ό μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

컴파일 μ‹œμ μ— λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό Exception(μΌλ°˜μ˜ˆμ™Έ) 라고 ν•˜κ³ ,
ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ‹œμ— λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό RuntimeException(μ‹€ν–‰μ˜ˆμ™Έ) 라고 ν•©λ‹ˆλ‹€.
λ‹€λ₯Έ 말둜 Exception을 Checked Exception, RuntimeException을 Unchecked Exception이라고도 ν•©λ‹ˆλ‹€.

πŸ“˜ try-catch-finally

μžλ°”μ˜ Exception μ²˜λ¦¬μ½”λ“œλŠ” try-catch문이 μžˆμŠ΅λ‹ˆλ‹€.

try {
    ...
} catch(μ˜ˆμ™Έ1) {
    ...
} catch(μ˜ˆμ™Έ2) {
    ...
} finally {
...

try : μˆ˜ν–‰ν•  μ‹€μ œ μ½”λ“œκ°€ λ“€μ–΄κ°€λŠ” λΆ€λΆ„μœΌλ‘œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄ catch문은 μ‹€ν–‰λ˜μ§€ μ•ŠμŒ
catch : μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰λ˜λŠ” λΆ€λΆ„
finally : μ˜ˆμ™Έμ™€ 상관 없이 μ‹€ν–‰λ˜λŠ” λΆ€λΆ„

πŸ“˜ throws / throw

try-catch문을 μ΄μš©ν•˜μ§€ μ•Šκ³ λ„ throws ν˜Ήμ€ throwλ₯Ό μ΄μš©ν•΄ 적극적으둜 μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ•„λž˜λŠ” μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έλ₯Ό λ§Œλ“œλŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

public class PersonalException extends [Runtime]Exception {
}

λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  λ•Œ throws둜 μ˜ˆμ™Έλ₯Ό μ„ μ–Έν•˜λ©΄, ν•΄λ‹Ή λ©”μ†Œλ“œμ—μ„œ μ„ μ–Έν•œ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œ ν˜ΈμΆœν•œ λ©”μ†Œλ“œλ‘œ μ˜ˆμ™Έκ°€ μ „λ‹¬λ©λ‹ˆλ‹€.(μ²˜λ¦¬κ°€ μ•„λ‹Œ μ „κ°€)
λ§Œμ•½ λ©”μ†Œλ“œμ—μ„œ 두 가지 μ΄μƒμ˜ μ˜ˆμ™Έλ₯Ό λ˜μ§€λ €λ©΄, implements처럼 콀마둜 κ΅¬λΆ„ν•˜μ—¬ μ˜ˆμ™Έ 클래슀 이름을 적어주면 λ©λ‹ˆλ‹€.

try 블둝 λ‚΄μ—μ„œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¬ κ²½μš°μ—λŠ” throw 뒀에 μ˜ˆμ™Έ 객체λ₯Ό μƒμ„±ν•˜κ±°λ‚˜, μƒμ„±λ˜μ–΄μžˆλŠ” 객체λ₯Ό λͺ…μ‹œν•΄μ€λ‹ˆλ‹€λ‹€. throwν•œ μ˜ˆμ™Έ ν΄λž˜μŠ€κ°€ catch 블둝에 μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•Šκ±°λ‚˜ throws 선언에 ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.
catch λΈ”λ‘μ—μ„œ μ˜ˆμ™Έλ₯Ό throwν•  κ²½μš°μ—λ„ λ©”μ†Œλ“œ μ„ μ–Έμ˜ throws ꡬ문에 ν•΄λ‹Ή μ˜ˆμ™Έκ°€ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

πŸ“˜ νŠΈλžœμ μ…˜

ν”„λ‘œκ·Έλž˜λ° μ‹œ Exception을 μ²˜λ¦¬ν•˜λŠ” μœ„μΉ˜λŠ” λŒ€λ‹¨νžˆ μ€‘μš”ν•©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ˜ μˆ˜ν–‰μ—¬λΆ€λ₯Ό κ²°μ •ν•˜κΈ°λ„ ν•˜κ³  νŠΈλžœμž­μ…˜ μ²˜λ¦¬μ™€λ„ λ°€μ ‘ν•œ 관계가 있기 λ•Œλ¬Έμ— μ˜ˆμ™Έλ₯Ό main λ©”μ†Œλ“œμ—μ„œ μ²˜λ¦¬ν• μ§€, μ‚¬μš©μž 지정 λ©”μ†Œλ“œμ—μ„œ μ²˜λ¦¬ν• μ§€ κ³ λ €ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

main() {
    try {
        func1();
        func2();
    }catch(μ˜ˆμ™Έ) {
       rollback();
    }
}

func1() throws μ˜ˆμ™Έ {
   ...
}

func2() throws μ˜ˆμ™Έ {
   ...
}

μœ„ 경우 func1μ΄λ‚˜ func2 쀑 ν•˜λ‚˜λΌλ„ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ μ „λΆ€ 싀행이 μ·¨μ†Œλ˜μ§€λ§Œ

main() {
    func1();
    func2();
}

func1(){
    try {
       ...
    }catch(μ˜ˆμ™Έ) {
       rollback();
    }
}

func2() {
    try {
       ...
    }catch(μ˜ˆμ™Έ) {
       rollback();
    }
}

μœ„μ™€ 같이 κ°œλ³„ λ©”μ†Œλ“œμ—μ„œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•˜κ²Œ 되면 func1μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•΄λ„ func2λŠ” 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€.

μΆ”κ°€ν•  것

  • throwable
  • throw / throws
profile
πŸ’» + β˜• = </>

0개의 λŒ“κΈ€