βοΈ κΉμνμ μ€μ μλ° - μ€κΈ 1νΈ μ λ£κ³ μμ±νλ λ³΅μ΅ λΈλ‘κ·Έ μ λλ€.
0. λ°°κ²½
νλ‘κ·Έλ¨μ΄ νμ μ μ λμλμ§λ§μ μλλ€
κ±°μ λλΆλΆμ νλ‘κ·Έλ¨μ μ€λ₯κ° λ°μνλλ° μ΄λ° μ€λ₯λ₯Ό μ΄λ»κ² μ²λ¦¬νλλμ λ°λΌ κ°λ°μμ μ€λ ₯μ΄ κ²°μ λλ€
μ€λμ μ΄λ° μ€λ₯λ₯Ό μ²λ¦¬νλ μμΈμ²λ¦¬μ λν΄μ μμ보μ
1. μμΈ κ³μΈ΅
μλ°λ νλ‘κ·Έλ¨ μ€ν μ€μ λ°μν μ μλ μμμΉ λͺ»ν μν©μ μ²λ¦¬νκΈ° μν λ©μ»€λμ¦μ μ 곡νλ€.
μ΄κ²μ΄ λ°λ‘ μμΈμΈλ° νλ‘κ·Έλ¨μ μμ μ±κ³Ό μ λ’°μ±μ λμ΄λλ° μμ£Ό μ€μν μν μ νλ€.
μλ°μ μμΈ κ³μΈ΅μ μμ κ°λ€
- Object : μμΈλ κ°μ²΄μ΄κΈ° λλ¬Έμ μ΅μμ λΆλͺ¨μ Object κ° μλ€
- Throwable : μ΅μμ μμΈ
- Erorr : μ ν리μΌμ΄μ μμ λ³΅κ΅¬κ° λΆκ°λ₯ν μμ€ν μμΈλ€. ν΄κ²°ν μ μκΈ° λλ¬Έμ κ°λ°μκ° μμΈλ₯Ό μ‘μΌλ €κ³ ν΄μλ μλλ€
- Exception : μ²΄ν¬ μμΈ
- μ ν리μΌμ΄μ λ‘μ§μμ μ¬μ©ν μ μλ μ΅μμ μμΈ
- Exception κ³Ό νμ μμΈλ μ»΄νμΌλ¬κ° 체ν¬νλ μ²΄ν¬ μμΈλ€
- RuntimeException : μΈμ²΄ν¬ μμΈ, λ°νμ μμΈ
- μ»΄νμΌλ¬κ° 체ν¬νμ§ μλ μΈμ²΄ν¬ μμΈ
- RuntimeException κ³Ό μμ μμΈλ λͺ¨λ μΈμ²΄ν¬ μμΈλ€
2. μμΈ κΈ°λ³Έ κ·μΉ
μμΈλ λ§μΉ νν λ리기μ κ°λ€ π£
μμΈκ° λ°μνλ©΄ μ‘μμ μ²λ¦¬νκ±°λ μ²λ¦¬ν μ μμΌλ©΄ λ°μΌλ‘ λμ ΈμΌ νλ€
Main → Service → Client κ° μλ μν©μμ Client μμ π₯ μμΈκ° λ°μνλ€ !!!
μμΈ μ²λ¦¬
π₯ Client → π§― Service → ποΈ Main
- π₯ Client μμ μμΈκ° λ°μνλ©΄, Service λ‘ μμΈλ₯Ό λμ§λ€
- π§― Service μμ μμΈλ₯Ό μ²λ¦¬νλ€
- ποΈ κ·Έλ¬λ©΄ Main μμλ μ μ νλ¦μΌλ‘ μ¬μ©ν μ μλ€
μμΈ λμ§
π₯ Client → π₯ Service → π₯ Main
- π₯ Client μμ μμΈκ° λ°μνλ©΄, Service λ‘ μμΈλ₯Ό λμ§λ€
- π₯ Service λ μ²λ¦¬ν μ μμ΄μ Main μΌλ‘ μμΈλ₯Ό λμ§λ€
- π₯ Main λ λ°μΌλ‘ μμΈλ₯Ό λμ§κ³ κ²°κ΅ μμΈ λ‘κ·Έλ₯Ό μΆλ ₯νλ©΄μ μμ€ν μ΄ μ’ λ£λλ€
μμΈμ λν 2κ°μ§ κΈ°λ³Έ κ·μΉ
- μμΈλ μ‘μμ μ²λ¦¬νκ±°λ λ°μΌλ‘ λμ ΈμΌ νλ€
- μμΈλ₯Ό μ‘κ±°λ λμ§ λ μ§μ ν μμΈ λΏλ§ μλλΌ κ·Έ μμΈμ μμλ€λ ν¨κ» μ²λ¦¬ν μ μλ€
3. μμΈ μ¬μ©νκΈ°
μμΈ λμ§κΈ°
public class Client {
public void call() throws MyCheckedException {
throw new MyCheckedException("ex");
}
}
- throw λ μλ‘μ΄ μμΈλ₯Ό λ°μμν¨λ€
- throws λ λ°μμν¨ μμΈλ₯Ό λ©μλ λ°μΌλ‘ λμ§λ€
μμΈ μ‘κΈ°
try {
// μ μ μ½λ
} catch (μμΈν΄λμ€ e) {
// μμΈ λ°μμ μ²λ¦¬ μ½λ
} finally {
// try μ€ν ν 무쑰건 μ€νλμ΄μΌ νλ μ½λ
}
- λμ Έμ§ μμΈλ try~catch~finally λ¬ΈμΌλ‘ μ‘μ μ μλ€
- try λ΄μλ μ μ μ½λκ° λ€μ΄κ° λ€μ΄κ°λ€
- λ§μ½, try μ μλ μ½λ μ€ μμΈκ° λ°μνκ³ , catch μ ν΄λΉ μμΈκ° μ μΈλμ΄ μμΌλ©΄ catch λ‘ λ€μ΄κ°λ€
- try κ° μ€νλκ³ λ ν finally μ μλ μ½λκ° μ€νλλ€
4. μ²΄ν¬ / μΈμ²΄ν¬ μμΈ
4-1. μ²΄ν¬ μμΈ
μ²΄ν¬ μμΈλ μμ μμΈ κ³μΈ΅μμ Exception μ μμλ°λ μμΈλ€
μ‘μμ μ²λ¦¬νκ±°λ λ°μΌλ‘ λμ§λλ‘ μ μΈν΄μΌ νλ€
κ·Έλ μ§ μμΌλ©΄ π¨ μ»΄νμΌ μ€λ₯κ° λ°μνλ€
μ²΄ν¬ μμΈ λ§λ€κΈ°
public class MyCheckedException extends Exception {
public MyCheckedException(String message) {
super(message);
}
}
- μ²΄ν¬ μμΈλ₯Ό λ§λ€λ €λ©΄ Exception μ μμλ°μΌλ©΄ λλ€
- super(message) λ‘ μ λ¬λ λ©μμ§λ Thrwable μ detailMessage μ 보κ΄λλ€
μ²΄ν¬ μμΈμ μ₯λ¨μ
π μ₯μ
- κ°λ°μκ° μ€μλ‘ μμΈλ₯Ό λλ½νμ§ μλλ‘ μ»΄νμΌλ¬λ₯Ό ν΅ν΄ λ¬Έμ λ₯Ό μ‘μμ€λ€
- κ°λ°μλ μ΄λ€ μ²΄ν¬ μμΈκ° λ°μνλμ§ μ½κ² νμ ν μ μλ€
π λ¨μ
- κ°λ°μκ° λͺ¨λ μ²΄ν¬ μμΈλ₯Ό λ°λμ μ‘κ±°λ λμ§λλ‘ μ²λ¦¬ν΄μΌ νλ―λ‘ λ²κ±°λ‘λ€
- ν¬κ² μ κ²½μ°κ³ μΆμ§ μλ μμΈκΉμ§ λͺ¨λ μ±κ²¨μΌ νλ€
4-2. μΈμ²΄ν¬ μμΈ
μΈμ²΄ν¬ μμΈλ μμ μμΈ κ³μΈ΅μμ RuntimeException μ μμλ°λ μμΈλ€
μ»΄νμΌλ¬κ° μμΈλ₯Ό 체ν¬νμ§ μκΈ° λλ¬Έμ μ‘μμ μ²λ¦¬νμ§ μμλ λλ€
μΈμ²΄ν¬ μμΈ ν΄λμ€ μμ±
public class MyUncheckedException extends RuntimeException {
public MyUncheckedException(String message) {
super(message);
}
}
- RuntimeException μ μμλ°μΌλ©΄ μΈμ²΄ν¬ μμΈ ν΄λμ€λ₯Ό λ§λ€ μ μλ€
μΈμ²΄ν¬ μμΈμ μ₯λ¨μ
π μ₯μ
- μ κ²½μ°κ³ μΆμ§ μμ μΈμ²΄ν¬ μμΈλ₯Ό 무μν μ μλ€
- μ²΄ν¬ μμΈμ κ²½μ° μ²λ¦¬ν μ μλ μμΈλ₯Ό λ°μΌλ‘ λμ§λ €λ©΄ νμ throws μμΈλ₯Ό μ μΈν΄μΌ νμ§λ§, μΈμ²΄ν¬ μμΈλ μλ΅ν μ μλ€
π λ¨μ
- κ°λ°μκ° μ€μλ‘ μμΈλ₯Ό λλ½ν μ μλ€
- μ²΄ν¬ μμΈλ μ»΄νμΌλ¬λ₯Ό ν΅ν΄ μμΈ λλ½μ μ‘μμ€λ€
5. μ€λ¬΄ μμΈ μ²λ¦¬ λ°©μ
μ€λ¬΄μμλ ν΄κ²°ν μ μλ μ€λ₯λ€μ΄ λ§μ΄ λ°μνλ€.
νμ§λ§, μλ λ€νΈμν¬ μλ²μ λ¬Έμ κ° λ°μν΄μ ν΅μ μ΄ λΆκ°λ₯ν κ²½μ° λ΄κ° μ¬μλνλ€κ³ ν΄λ ν΄κ²°ν μ μλ€
κ·Έλ¦¬κ³ νλ‘κ·Έλ¨μ΄ 볡μ‘ν΄μ§λ©΄μ μ°κ²°λμ΄ μλ ν΄λμ€κ° λ§λ€
μ΄λ΄ λ μ²΄ν¬ μμΈμ μΈμ²΄ν¬ μμΈλ₯Ό μ¬μ©νλ μλ₯Ό μκ°ν΄λ³΄μ
β μ²΄ν¬ μμΈ μ¬μ© μλ리μ€
- μ λ§μ ν΄λμ€κ° μμ λ§μ μμΈλ₯Ό λͺ¨λ μ²΄ν¬ μμΈλ‘ λ§λ€μ΄μ μ λ¬νλ€
- Service λ₯Ό νΈμΆνλ κ³³μμ λμ§λ μ²΄ν¬ μμΈλ€μ λͺ¨λ μ²λ¦¬ν΄μΌ νλ€
- λ§μ½ μ²λ¦¬ν μ μμΌλ©΄ λ°μΌλ‘ λμ§λ€
class Service {
void sendMessage(String data) throws NetworkException, DatabaseException, ...{
...
}
}
- λͺ¨λ μ²΄ν¬ μμΈλ₯Ό νλμ© λ°μΌλ‘ λμ ΈμΌ νλ€
- λΌμ΄λΈλ¬λ¦¬κ° λμ΄λ μλ‘ throws μ μ λ μμΈλ λμ΄λλ€
βοΈ μΈμ²΄ν¬ μμΈ μ¬μ© μλ리μ€
- μ λ§μ ν΄λμ€κ° μμ λ§μ μμΈλ₯Ό λͺ¨λ μΈμ²΄ν¬ μμΈλ‘ λ§λ€μ΄μ μ λ¬νλ€
- Service λ₯Ό νΈμΆνλ κ³³μμ λμ§λ μΈμ²΄ν¬ μμΈλ₯Ό λͺ¨λ μ²λ¦¬νμ§ μμλ λλ€
class Service {
void sendMessage(String data) {
...
}
}
- μΈμ²΄ν¬ μμΈμ΄λ―λ‘ throws λ₯Ό μ μΈνμ§ μμλ λλ€
- μ¬μ©νλ λΌμ΄λΈλ¬λ¦¬κ° λμ΄λμ μΈμ²΄ν¬ μμΈκ° λμ΄λλ κ²½μ° λ³ΈμΈμ΄ νμν μμΈλ§ μ‘μΌλ©΄ λλ€
→ κ·Έλ κΈ° λλ¬Έμ μ€λ¬΄μμλ βοΈ μΈμ²΄ν¬ μμΈλ₯Ό λ§μ΄ μ¬μ©νλ€
→ κ·Έλ¦¬κ³ μ²λ¦¬ν μ μλ μμΈμ κ²½μ°μλ 곡ν΅μΌλ‘ μ²λ¦¬νλ€
6. try-with-resource
- try κ° λλλ©΄ μΈλΆ μμμ λ°λ©νλ ν¨ν΄μ λ§μ΄ μ¬μ©νλ€
- κ·Έλ κΈ° λλ¬Έμ μλ° 7λΆν° try with resource λΌλ κΈ°λ₯μ΄ μΆκ°λμλ€
public class TestClass implements AutoCloseable {
...
@Override
public void close(){
System.out.println("TestClass.close");
disconnect();
}
}
try-with-resource λ₯Ό μ¬μ©νλ €λ©΄
- μ μ μ½λμ μ¬μ©ν ν΄λμ€μμ AutoCloseable μ ꡬν
- close() λ©μλ μ€λ²λΌμ΄λ©
- close() λ©μλμμ μμΈμ²λ¦¬κ° λλκ³ μ€νν μ½λ μμ±
ν ν
try (TestClass test = new TestClass()) {
// 리μμ€λ₯Ό μ¬μ©νλ μ½λ
}
- try ~ catch λ¬Έμ try μμ κ°μ²΄λ₯Ό μμ±ν΄ λ£μ΄μ€λ€
- κ·Έλ¬λ©΄ try λΈλμ΄ λλ¬μ λ μλμΌλ‘ TestClass λ΄λΆμ close() λ₯Ό νΈμΆνλ€
- μμΈκ° λ°μνλ©΄ try μμ λ²μ΄λλ μκ° close() κ° νΈμΆλλ€.
- μ¦, try κ° νΈμΆλκ³ catch κ° νΈμΆλλ€
try-with-resource μ μ₯μ
- 리μμ€ λμ λ°©μ§ : λͺ¨λ 리μμ€κ° μ λλ‘ λ«νλλ‘ λ³΄μ₯νλ€
- μ½λ κ°κ²°μ± λ° κ°λ μ± ν₯μ : λͺ μμ μΈ close() νΈμΆμ΄ νμμλ€
- μ€μ½ν λ²μ νμ : 리μμ€λ‘ μ¬μ©λλ client λ³μμ μ€μ½νκ° try λΈλ μμΌλ‘ νμ λλ€
- μ‘°κΈ λ λΉ λ₯Έ μμ ν΄μ : try λΈλμ΄ λλλ©΄ μ¦μ close() λ₯Ό νΈμΆνλ€
'π± μΈνλ° > βοΈ κΉμνμ μ€μ μλ° - μ€κΈ 1νΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ° Object ν΄λμ€ (0) | 2025.09.01 |
---|---|
μλ° λνΌ, Class μ΄μ 리 (0) | 2025.07.19 |
μλ° μ΄κ±°ν ENUM μ΄μ 리 (2) | 2025.07.10 |
μλ° μ€μ²© ν΄λμ€μ λ΄λΆ ν΄λμ€ (3) | 2025.07.09 |
μλ° λ μ§μ μκ° λΌμ΄λΈλ¬λ¦¬ μ΄μ 리 (0) | 2025.07.07 |