β (Un)Checked Exceptionκ³Ό νΈλμμ μ μ€ν΄μ μ§μ€
μλͺ» μλ €μ§ (Un)Checked Exception νΈλμμ
Checked Exception κ³Ό Unchecked Exception μ°¨μ΄λ₯Ό μμλ³Όλ λ€μκ³Ό κ°μ μ 리본μ λ°κ²¬ νμλ€.
λ§μΌ μ½λμμ μμΈκ° λ°μνλλ° Checked Exception μ΄λ©΄ λ‘€λ°±μ νμ§μκ³ κ·Έλλ‘ μ§νλκ³ , λ§μΌ Unchecked Exception μ΄λ©΄ λ‘€λ°±μ νλ€λ μκΈ°μ΄λ€.
κ·Έλ¬λ μ΄λ λ°μ λ§κ³ λ°μ νλ¦° μ μμ΄λ€.
λ°±κΈ°μ λμ κ°μμμλ μ΄ λΆλΆμ λν΄μ λ°λνκ² νΌλ΄μ£ΌμκΈ°λ νλ€. μ§κΈ λΆν° κ·Έ μ΄μ λ₯Ό μμ보μ.
μλ°μ νΈλμμ λ€λ£¨κΈ°
νΈλμμ μ λ°μ΄ν°λ² μ΄μ€μμλ μ°μ΄λ κ°λ μΌλ‘μ, νλμ μμ λ¨μλ₯Ό λ»νλ€.
μλ₯Όλ€μ΄ μΌνλͺ°μ "μνλ°μ‘"μ΄λΌλ νΈλμμ μ κ°μ ν΄ λ³΄μ.
"μνλ°μ‘" μ΄λΌλ νΈλμμ μλ "ν¬μ₯" → "μμμ¦λ°ν" → "λ°μ‘" μμΌλ‘ μ²λ¦¬κ° λλ€.
λ§μΌ μ΄ 3κ°μ§ μμ μ€κ°μ νλλΌλ μ€ν¨νλ€λ©΄ 3κ°μ§ μμ μ λͺ¨λ μ·¨μνκ³ "μνλ°μ‘" μ μνλ‘ λλλ €μΌ νλ€. μλνλ©΄ λͺ¨λ μ·¨μνμ§ μμΌλ©΄ λ°°μ‘ μ²λ¦¬ κ³Όμ μμ λ¬Έμ κ° μ겨 κΌ¬μΌ μ μκΈ° λλ¬Έμ΄λ€.
νλ‘κ·Έλ¨μ΄ λ€μκ³Ό κ°μ΄ μμ±λμ΄ μλ€κ³ κ°μ ν΄ λ³΄μ.
μλλ μ€μ μ½λκ° μλλΌ μ΄λ»κ² λμνλμ§λ₯Ό κ°λ΅νκ² ννν μμ¬ μ½λμ΄λ€.
public void μνλ°μ‘() {
ν¬μ₯();
μμμ¦λ°ν();
λ°μ‘();
}
public void ν¬μ₯() {
...
}
public void μμμ¦λ°ν() {
...
}
public void λ°μ‘() {
...
}
μΌνλͺ° μ΄μμλ ν¬μ₯, μμμ¦λ°ν, λ°μ‘μ΄λΌλ μΈκ°μ§ μ€ 1κ°μ§λΌλ μ€ν¨νλ©΄ λͺ¨λ μ·¨μνκ³ μΆμ΄νλ€.
μ΄λ°κ²½μ°, κ° μμ
λ©μλμμ μμΈκ° λ°μνλ©΄ μμ λ©μλμΈ μνλ°μ‘() μμ μ²λ¦¬νλλ‘ throws λ₯Ό μ€μ ν΄μ£Όκ³ , μνλ°μ‘() λ©μλμμ try - catch λ¬ΈμΌλ‘ μμ
λ€μ κ°μΈμ£Όλ©΄ λλ€.
κ·Έλ¬λ©΄, ν¬μ₯, μμμ¦λ°ν, λ°μ‘ λ©μλ μμ νλμ μμ μμ μμΈκ° λ°μνλ©΄, μμΈλ₯Ό μμ λ©μλλ‘ throwνκ³ , μνλ°μ‘ λ©μλμμ throwλ μμΈλ₯Ό μ²λ¦¬νμ¬, μμΈκ° λ°μν μμ κ·Έ λ€λ‘λ μμ μ΄ μ§νλμ§ μμΌλ©°, catchλ¬Έμμ λͺ¨λ μ·¨μνλ μμ λ©μλλ₯Ό μ€ννλ€λ©΄, μλ²½ν νΈλμμ μ²λ¦¬ λ‘μ§μ΄ μμ±λλ€.
public void μνλ°μ‘() {
try {
ν¬μ₯();
μμμ¦λ°ν();
λ°μ‘();
}catch(μμΈ) {
λͺ¨λμ·¨μ(); // νλλΌλ μ€ν¨νλ©΄ λͺ¨λ μ·¨μνλ€.
}
}
public void ν¬μ₯() throws μμΈ {
...
}
public void μμμ¦λ°ν() throws μμΈ {
...
}
public void λ°μ‘() throws μμΈ {
...
}
λ°λλ‘ κ° μμ λ©μλ λ΄μμ μΌμΌν try - catch μμΈ μ²λ¦¬λ₯Ό ν΄μ€λ€λ©΄, λ§μΌ 3κ°μ§ μμ μ€ νλκ° μμΈκ° λ°μνλλΌλ μμ λ©μλ μ€ν μ체μλ μν₯μ μ£Όμ§ μμ 3κ°μ§ μμ μ΄ μνλ°μ‘ λ©μλμμ μ μ½ μμ΄ λͺ¨λ μ€νλκ² λλ€.
public void μνλ°μ‘() {
ν¬μ₯();
μμμ¦λ°ν(); // λ―ΌμΌ μμμ¦ λ°ν κ³Όμ μμ μμΈκ° λ°μν΄λ, λ©μλ λ΄μμ μ체μ μΌλ‘ μμΈ μ²λ¦¬λ₯Ό ν΄μ£ΌμκΈ° λλ¬Έμ
λ°μ‘(); // μμμ¦λ°νμ·¨μλ₯Ό νμ§λ§ κ²°κ΅ λ°μ‘ μμ
λ©μλλ μ€νλκ² λμ΄λ²λ¦°λ€.
}
public void ν¬μ₯(){
try {
...
}catch(μμΈ) {
ν¬μ₯μ·¨μ();
}
}
public void μμμ¦λ°ν() {
try {
...
}catch(μμΈ) {
μμμ¦λ°νμ·¨μ();
}
}
public void λ°μ‘() {
try {
...
}catch(μμΈ) {
λ°μ‘μ·¨μ();
}
}
μ΄λ κ² μμΈμ²λ¦¬λ₯Ό μ΄λ μμ λ©μλμ νλλμ λ°λΌ, μμ μ μ·¨μνκ³ λ‘€λ°±μ ν μ§, μλλ©΄ λ‘€λ°±μ νμ§ μκ³ κ·Έλ₯ μ§νν μ§ κ°λ°μκ° μ§μ μ ν μ μλ κ²μ΄λ€.
(Un)Checked Exceptionκ³Ό νΈλμμ μ μ무 μκ΄ μλ€
λ³Έλ¬Έ μ΄λ°μ λμμλ νμμ μ§μ ν κ² μ²λΌ, κ²°λ‘ λΆν° λ§νμλ©΄ νΈλμμ κ·μΉκ³Ό μμΈμ²λ¦¬λ μ ν μκ΄μ΄ μλ€.
μμμ μνλ°μ‘ μ²λ¦¬λ₯Ό μμ¬ μ½λλ‘ νμΈν΄λ΄€λ―μ΄ λ‘€λ°±μ νλ μνλ κ·Έκ²μ μ μ μΌλ‘ κ°λ°μ λ§μμ΄λ€.
λν μμμ λ§ν νΈλμμ μ΄, λ©μΈμ§ νΈλμμ μ λ§νλ 건μ§, λ°μ΄ν°λ² μ΄μ€ νΈλμμ μ λ§νλ 건μ§λ μ λ§€νλ€.
λ§μΌ λ°μ΄ν°λ² μ΄μ€μ νΈλμμ μ λ§νλ κ²μ΄λΌλ checked exceptoinμ΄λ unchecked exceptoinμ΄λ μ λ°λΌ λ‘€λ°±μ ν μ§ μν μ§λ μ μ μΌλ‘ κ°λ°μμκ² λ¬λ € μλ€.
μ¦, μλ° νλ‘κ·Έλλ° μΈμ΄μμλ μμ κ°μ κ·μΉμ μλ€.
νμ§λ§ μ λ κ² Exception μ’ λ₯μ λ°λΌ λ‘€λ°± μ λ¬΄κ° λ€λ₯΄λ€κ³ μ 리λ μ΄μ λ, μλ°μ μ λͺ ν νλ μμν¬ Spring Framework μ νΈλμμ μ²λ¦¬μμ λΉλ‘― λκΈ° λλ¬Έμ΄λ€.
μ€νλ§μμλ κΈ°λ³Έμ μΌλ‘λ λ°νμ μμΈ κ°μκ²½μ° λ°λ‘ λ‘€λ°±μ νλ€.
κ·Έλ¬λ μ΄ μν©λ κ°λ°μκ° μ΅μ μ μ΄λ»κ² μ€μ νλλμ λ°λΌ μΆ©λΆν λ°κΏ μ μλ μμμ΄λ€. μλ₯Όλ€μ΄ λ°νμ μμ μμΈν΄λμ€ μ€μ λͺλͺμ 골λΌμ λ‘€λ°±μ νμ§ μλλ‘ μ€μ μ΄ κ°λ₯νλ€.
λ°λΌμ μ 리νμλ©΄, μλ°λ₯Ό μ€νλ§κ³Ό λμΌμ νλ€λ©΄ μμ μ 리λ λ§μ§λ§, μλ° νλ‘κ·Έλλ°μμλ§ μκ°νλ€λ©΄ checked exceptoinκ³Ό unchecked exceptoinκ³Ό νΈλμμ λ‘€λ°± μ 무λ μ°κ΄μ΄ μλ κ²μ΄λ€. κ·Έλ¦¬κ³ μμΈλ°μμ΄ νΈλμμ μ²λ¦¬μ λν΄μλ checked λ unchecked λ μ μ μΌλ‘ κ°λ°μ λ§μμ λ¬λ €μλ€κ³ λ³Ό μ μλ€.
# μ°Έκ³ μλ£
https://www.youtube.com/watch?v=_WkMhytqoCc