π» Programming/Java
[Java] μλ° μμΈ/μλ¬ μ²λ¦¬ μνκΈ° (How to improve exception handling)
μμΈ μ²λ¦¬/μλ¬ νΈλ€λ§ μνκΈ°
μλ νμΈμ, μ€λμ μμΈ μ²λ¦¬(μλ¬ νΈλ€λ§)μ λν΄μ μκΈ°λ₯Ό ν΄λ³ΌκΉ ν©λλ€.
μ± μ λμ€λ λλ μΈν°λ· μμμ κ°λ΅νκ² μ€λͺ νλ try-catch μμΈμ²λ¦¬μ λν λ΄μ©μ μλκ³ μ§μ κ°λ°μ μ§ννλ©΄μ κ²½νν λ΄μ©μ ν λλ‘ μ΄λ κ² νλ©΄ μ’κ² λ€ μΆμ λ΄μ©λ€μ 곡μ νλ μ°¨μμμ μμ±νλ κΈμ λλ€. νΉμ¬λ λ μ’μ λ°©λ²μ΄λ 곡μ ν΄μ£Όμκ³ μΆμ λ΄μ©μ΄ μλ€λ©΄ λκΈλ νμν©λλ€.
μ°μ μλ° μμ μ΄λ ꡬκΈλ§μ ν΄μ μ°Ύλ μλ¬ νΈλ€λ§μ λν λ΄μ©λ€μ λλΆλΆ try-catch λ¬Έμ μ¬μ©νλ©΄ λλ€μμ λλ©λλ€.
νμ§λ§ λ¨μν κ·Έλ κ² μμ νλ©΄ μλ¬ νΈλ€λ§μ μνλ€κ³ ν μ μμ΅λλ€.
볡μ‘ν λΉμ¦λμ€ λ‘μ§μ ꡬννλ€λ³΄λ©΄ μ¬λ¬ ν΄λμ€λ€μ λλλ€λ©΄μ μ¬λ¬ λ©μλλ€μ κ±°μΉκ² λ©λλ€.
μ λ©μλ μ½ μ²΄μΈμ νλμ νλ‘μΈμ€(κΈ°λ₯)μ΄ μ²λ¦¬λ λμ κ³Όμ μ μΌλΆμ λλ€. μλ₯Όλ€λ©΄ controller -> service -> dao λ μ΄λ° 건λ°μ, μ무리 볡μ‘ν μλΉμ€λΌ νλλΌλ κ²°κ΅ μμ²μμλΆν° μλ΅μ μ£ΌκΈ°κΉμ§μ κ³Όμ μ κ²°κ΅ μ κ·Έλ¦Όμ²λΌ ν μ€λ‘ μ°κ²°μ΄ κ°λ₯νμ£ .
λ°λΌμ μ΄λ μμ μ try-catch λ‘ μμΈλ₯Ό μ‘μμΌ ν μ§ κ·Έλ¦¬κ³ μμΈλ₯Ό μ‘μλ€λ©΄ μ΄λ€ μ²λ¦¬λ₯Ό ν΄μΌν μ§μ λν΄ λ§μ κ³ λ―Όμ΄ νμν©λλ€. νμ§λ§ μ€μ κ·Έλ° κ³ λ―Όμ λ³λ‘ νμ§ μκ³ λμΆ© μλ¬λ‘κ·Έ μ°μ΄λλ κ°λ°μλ€μ΄ λ§μ κ²μ΄ μ¬μ€μ΄μ£ . μ¬μ§μ΄ catchλ‘ μ‘μμ λ‘κ·Έλ§ λ¨κΈ°κ³ λ€μ throwλ₯Ό νκΈ°λ ν©λλ€. λ¬΄μ¨ ννλ리기 νλ κ²λ μλκ³ λ§μ΄μ£ -_-;; μ΅μ μ λλ€. κ·Έλ κ² κ°λ°λ μλΉμ€λ νλμ μλ¬μ λν΄μ μ€λ³΅μ μΌλ‘ μ¬λ¬κ°μ λ‘κ·Έλ₯Ό λ¨κΈ°λ κ²μ νμΈν μ μκ³ λλ²κΉ λ λΉν¨μ¨μ μΌλ‘ λ§λ€μ΄ λ²λ¦½λλ€. κ·ΈλΌ μ΄λ»κ² νλ κ²μ΄ μ’μ κ²μΌκΉμ?
첫 λ²μ§Έλ μμ²μ λ°μμ μλ΅μ μ£ΌκΈ°κΉμ§ νλμ 체μΈμμ νΉμ μμΈμ λν μ²λ¦¬λ ν κ³³μμλ§ νλλ‘ νλ κ²μ΄ μ’μ΅λλ€. μ¦, μ μ²΄μΈ κ·Έλ¦Όμμ λ©μλ 1, 2, 3, 4 μ€ νλμ λ©μλμμλ§ AλΌλ μμΈμ λν μ²λ¦¬λ₯Ό νλ€λκ±°μ£ . 컨νΈλ‘€λ¬ λΆλΆμμ ExceptionHandlerλ₯Ό μ΄μ©ν΄μ μ²λ¦¬ν μλ μκ³ μλΉμ€ λ μ΄μ΄μμ try-catch λ¬Έμ μ΄μ©ν΄μ μ²λ¦¬ν΄λ λ©λλ€. λ©μλ3μμ μμΈμ²λ¦¬λ₯Ό ν΄λμλλ° λΆνμνκ² λ©μλ2μμ λ νκ³ μλ€κ±°λ νλ€λ©΄ λ μ€ νλλ₯Ό μ κ±°νλκ² μ μ§λ³΄μνλλ° ν° λμμ΄ λ©λλ€.
λ λ²μ§Έλ catchλ₯Ό νμΌλ©΄ μ μ ν μ²λ¦¬λ₯Ό ν΄μ€μΌ νλ€λ κ²λλ€. μ¬κΈ°μ "μ μ ν" μ΄λΌλ λ§μ΄ μ 맀ν μ μλλ°μ, λ¨μν λ‘κ·Έλ§ μ°κ³ catchν μμΈλ₯Ό λ€μ throw νκ³ μλ€λ©΄ ν΄λΉ try-catchλ¬Έμ μΈλͺ¨μλ κ²μΌ κ°λ₯μ±μ΄ 99.9%μ λλ€. κ·Έλ° κ²½μ°λΌλ©΄ calleeμμλ§ catchν΄μ λ‘κ·Έλ₯Ό λ¨κΈ°κ³ μ μ ν μ²λ¦¬λ₯Ό νλκ² λ κΉλν©λλ€. κ΅³μ΄ λ κ΅°λ°μ λλμ΄ catchν νμκ° μλ€λ κ±°μ£ . λ, μ΄λ€ μμΈλ μ‘μμ λ‘κ·Έλ§ λ¨κΈ°κ³ 무μν μλ μκ³ (μ΅μ λ κ°μ΄ μλ€κ±°λ νλ κ²½μ°), μ΄λ€ μμΈλ λλ²κΉ μ© λ‘κ·Έλ₯Ό λ¨κΈ°κ³ λΉμ¦λμ€ λ‘μ§μ λ‘€λ°±νλ μ²λ¦¬λ₯Ό ν΄μΌν μλ μμ΅λλ€. ν΄λΉ νλ‘μΈμ€λ₯Ό μ§νν¨μ μμ΄μ μ΄λ»κ² μ²λ¦¬ν΄μΌ ν μ§λ APIμ€ν λλ μ μ± μ λ°λΌ λ¬λΌμ§ κ²λλ€.
λ§μ§λ§μΌλ‘, μμΈκ° λ°μνμ κ²½μ° λλ²κΉ μ© λ‘κ·Έλ₯Ό λ¨κΈ°κΈ°λ‘ νλ€λ©΄ μ λ§ νμν μ λ³΄λ§ κ°λ μ± μκ² λ‘κ·Έλ₯Ό λ¨κΈ°λ κ²μ λλ€. ν μ€μ λ‘κ·Έλ§ μ λ¨κ²¨λ λλ²κΉ νκΈ° μ½λλ‘ μμ±νλ©΄ μ μ§λ³΄μ ν¨μ¨μ± λΏλ§ μλλΌ λ‘κΉ μμ€ν μ λΆνλ μ€μΌ μ μκ² λ©λλ€.
μ κ²½νμ ν λλ‘ μ μ λλ μ£Όλμ΄ κ°λ°μ λΆλ€κ»μ μ΄λ κ² ν΄λ³΄μλ©΄ μ’κ² λ€λ μκ°μΌλ‘ λμ μ¬ λ³΄μμ΅λλ€.
νΉμ μ΄ κΈμ μ½μΌμλ€κ° λ©μ§ λ Ένμ°κ° μμΌμ λΆλ€μ λκΈλ‘ 곡μ λΆνλλ €μ ^-^