All :L
[Java] ์์ธ (Exception) ๋ณธ๋ฌธ
๋ฐ์ํ
๐ ์์ธ์ ์ฒ๋ฆฌ
1๏ธโฃ ์๋ฌ์ ์์ธ
- ์ด๋ค ์์ธ์ ์ํด ์ค๋์ ํ๊ฑฐ๋ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ
- exception handling(์์ธ ์ฒ๋ฆฌ)๋?
- ์์ธ ๋ฐ์ ์ ํ๋ก๊ทธ๋จ์ ๋น ์ ์ ์ข ๋ฃ๋ฅผ ๋ง๊ณ ์ ์์ ์ธ ์คํ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ
- ์์ธ์ ๊ฐ์ง ๋ฐ ์์ธ ๋ฐ์ ์ ๋์ํ ์ฝ๋ ์์ฑ ํ์
2๏ธโฃ ์์ธ ํด๋์ค์ ๊ณ์ธต
- checked exception → ์์ธ์ ๋ํ ๋์ฒ ์ฝ๋๊ฐ ์์ผ๋ฉด ์ปดํ์ผ์ด ์งํ๋์ง X
- unchecked exception → ์์ธ์๋ํ ์ฝ๋๊ฐ ์๋๋ผ๋ ์ปดํ์ผ์ ์งํ๋จ
3๏ธโฃ Exception handling ๊ธฐ๋ฒ
- try{} catch() {}
- public class SimpleException { public static void main(String[] args) { int[] intArray = { 10 }; try { System.out.println(intArray[2]); } catch (ArrayIndexOutOfBoundsException e) { // ์ฌ๊ณ ์ฒ๋ฆฌ System.out.println(e.getMessage()); e.printStackTrace(); } System.out.println("ํ๋ก๊ทธ๋จ ์ข ๋ฃํฉ๋๋ค."); } }
- Throwable์ ์ฃผ์ ๋ฉ์๋
- public String getMessage() - ๋ฐ์๋ ์์ธ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๋ฉ์์ง ๋ฐํ
- public Throwable getCause() - ์์ธ์ ์์ธ์ด ๋๋ Throwable ๊ฐ์ฒด ๋๋ null์ ๋ฐํ
- public void printStackTrace() - ์์ธ๊ฐ ๋ฐ์๋ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ๊น์ง์ ๋ฉ์๋ ํธ์ถ ์คํ์ ์ถ๋ ฅ / ์ฃผ๋ก ๋๋ฒ๊น ์ ์๋จ์ผ๋ก ์ฌ์ฉ
4๏ธโฃ try-catch๋ฌธ ํ๋ฆ
- try-catch๋ฌธ ํ๋ฆ
- try ๋ธ๋ก์์ ์์ธ ๋ฐ์ ์ JVM์ด ํด๋น Exception ํด๋์ค์ ๊ฐ์ฒด ์์ฑ ํ ๋์ง(throw)
- ๋์ ธ์ง exception์ ์ฒ๋ฆฌํ ์ ์๋ catch ๋ธ๋ก์์ ๋ฐ์ ํ ์ฒ๋ฆฌ
- ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด try-catch๋ธ๋ก์ ๋ฒ์ด๋ ๋ค์ ๋ฌธ์ฅ ์งํ
- try ๋ธ๋ก์์ ์ด๋ ํ ์์ธ๋ ๋ฐ์ํ์ง ์์ ๊ฒฝ์ฐ
- catch ๋ฌธ์ ๊ฑฐ์น์ง ์๊ณ try-catch๋ธ๋ก์ ๋ค์ ํ๋ฆ ๋ฌธ์ฅ ์คํ
- Checked Exception ์ฒ๋ฆฌ
- ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ๋ถ๊ฐ : Checked Exception
- public class CheckedExceptionHandling { public static void main(String[] args) { // TODO: ๋ค์์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํด๋ณด์. // ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํด try-catch๋ฌธ ์ฌ์ฉ try { Class<?> myclass = Class.forName("com.ssafy.day09.a_basic.SimpleException"); // Unhandled exception type ClassNotFoundException ๋ผ๋ ์๋ฌ ๋ฐ์ System.out.println(myclass.getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } // END System.out.println("ํ๋ก๊ทธ๋จ ์ ์ ์ข ๋ฃ"); } }
5๏ธโฃ ๋ค์ค exceptino handling
- try ๋ธ๋ก์์ ์ฌ๋ฌ ์ข
๋ฅ์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ
- ํ๋์ try ๋ธ๋ก์ ์ฌ๋ฌ ๊ฐ์ catch ๋ธ๋ก ์ถ๊ฐ ๊ฐ๋ฅ
- ์์ธ ์ข ๋ฅ๋ณ๋ก catch ๋ธ๋ก ๊ตฌ์ฑ
- ์ฒ๋ฆฌ๋ catch ๋ฌธ์ฅ์ ์ฐพ์ ๋๋ ๋คํ์ฑ์ด ์ ์ฉ๋จ
- ๋ค์ค catch ๋ฌธ์ฅ ์์ฑ ์์ฑ ์ ์ ์ฌํญ
- ์์ ํ์
์ ์์ธ๊ฐ ๋จผ์ ์ ์ธ๋๋ ๊ฒฝ์ฐ ๋ค์ ๋ฑ์ฅํ๋ catch ๋ธ๋ก ๋์ ๊ธฐํ X
- Unreachable catch block for Exception
- ์์ ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ฌด๊ด
- ์์ ๊ด๊ณ์์๋ ์์ ๋ฒ์(์์)์์ ํฐ ๋ฒ์(์กฐ์)์์ผ๋ก ์ ์
- ์์ ํ์
์ ์์ธ๊ฐ ๋จผ์ ์ ์ธ๋๋ ๊ฒฝ์ฐ ๋ค์ ๋ฑ์ฅํ๋ catch ๋ธ๋ก ๋์ ๊ธฐํ X
- FileNotFoundException์ ์์ ๊ด๊ณ
- java.lang.Object → java.lang.Throwable → java.lang.Exception → java.lang.IOException → java.lang.FileNotFoundException
๐ try ~ catch ~ finally
1๏ธโฃ try ~ catch ~ finally ๊ตฌ๋ฌธ์ ์ด์ฉํ ์์ธ ์ฒ๋ฆฌ
- finally๋ ์์ธ ๋ฐ์ ์ฌ๋ถ์ ์๊ด์์ด ์ธ์ ๋ ์คํ
- ์ค๊ฐ์ return์ ๋ง๋๋ ๊ฒฝ์ฐ๋ finally ๋ธ๋ก์ ๋จผ์ ์ํ ํ ๋ฆฌํด ์คํ
- ์ฃผ์ ๋ชฉ์ → try ๋ธ๋ก์์ ์ฌ์ฉํ ๋ฆฌ์์ค ๋ฐ๋ฉ
- ์์ฑํ ์์คํ
์์ ๋ฐ๋ฉ ํ์
- ๋ฐ๋ฉํ์ง ์์ ์ ์ฅ๋ resource leak ๋ฐ์ ๊ฐ๋ฅ → ๋ฐ๋์ close ์ฒ๋ฆฌ
- ์ง์ ๋ถํ ์ ๋ฐ์ ์๋ finally ๋ธ๋ก
- close ๋ฉ์๋ ์์ฒด๊ฐ IOException ์ ๋ฐ ๊ฐ๋ฅ
- FileInputStream ์์ฑ์์์ IOException ๋ฐ์ ์ fileInput์ null์ธ ์ํฉ
2๏ธโฃ try ~ with ~resources
- ๋ฆฌ์์ค์ ์๋ close ์ฒ๋ฆฌ
- try(๋ฆฌ์์ค_ํ์ 1 res1 = ์ด๊ธฐํ; ๋ฆฌ์์ค_ํ์ 2 res2 = ์ด๊ธฐํ; …) {} catch() {}
- try ์ ์ธ๋ฌธ์ ์ ์ธ๋ ๊ฐ์ฒด๋ค์ ๋ํด ์๋ close ํธ์ถ(finally ์ญํ )
- ํด๋น ๊ฐ์ฒด๋ค์ด AutoCloseable interface๋ฅผ ๊ตฌํํ ๊ฒ
- ํด๋น ๊ฐ์ฒด๋ try ๋ธ๋ก์์ ๋ค์ ํ ๋น๋ ์ X → final ๋ณ์๋ก ๊ฐ์ฃผ
- ์ฃผ์์
- ํ์ฅ๋ rty
withresources ์ฌ์ฉ์ ๋ฌธ์ฅ์ ํ๋ ์ด์์ catch ๋๋ finally ํ์ - ์๋ ์์ฑ๋๋ ์ฝ๋๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๋์๋๋์ง ์ ํํ ์์์ผ ํจ.
- try
withresources๋ฌธ์ฅ์ nested try ๋ธ๋ก์ ๊ตฌ์ฑ
- ํ์ฅ๋ rty
- ๋จ์ VS ํ์ฅ try
withresources- ๋จ์ → ๊ทธ๋ฅ ์ฐ๊ณ close๋ง ํ ๊ฒฝ์ฐ ์ต์
๐ throws ํ์ฉ
1๏ธโฃ throws ํค์๋๋ฅผ ํตํ ์ฒ๋ฆฌ ์์
- method์์ ์ฒ๋ฆฌํด์ผ ํ ํ๋ ์ด์์ ์์ธ๋ฅผ ํธ์ถํ ๊ณณ์ผ๋ก ์ ๋ฌ (์ฒ๋ฆฌ ์์)
- ๋จ์ ์ ๋ฌ(์์ธ ์์ด์ง๋ ๊ฒ X)
- ์์ธ ์ ๋ฌ๋ฐ์ ๋ฉ์๋๋ ๋ค์ ์์ธ์ฒ๋ฆฌ์ ์ฑ ์ ๋ฐ์
- ์ฒ๋ฆฌํ๋ ค๋ ์์ธ ์กฐ์ ํ์ ์ผ๋ก throws ์ฒ๋ฆฌ ๊ฐ๋ฅ
- checked exception๊ณผ throws
- checked exception → ๋ฐ๋์ try~catch or throws ํ์
- ํ์ํ ๊ณณ์์ try~catch ์ฒ๋ฆฌ
- runtime exception๊ณผ throws
- runtime exception์ throws ํ์ง ์์๋ ์ ๋ฌ๋จ.
- but, ๊ฒฐ๊ตญ try~catch๋ก ์ฒ๋ฆฌํด์ผ ํจ.
- ๋ก๊ทธ ๋ถ์๊ณผ ์์ธ์ ์ถ์
- Throwable์ printStackTrace๋ ๋ฉ์๋ ํธ์ถ ์คํ ์ ๋ณด ์กฐํ ๊ฐ๋ฅ
- ์ต์ด ํธ์ถ ๋ฉ์๋๋ถํฐ ์์ธ ๋ฐ์ ๋ฉ์๋๊น์ง ์คํ ์ ๋ณด์ถ๋ ฅ
- ํ์ธํด์ผํ ์ ๋ณด
- ์์ธ ์ข ๋ฅ →์ด๋ค ์์ธ์ธ์ง
- ์์ธ ์์ธ → ์์ธ ๊ฐ์ฒด์ ๋ฉ์์ง๋ ๋ฌด์์ธ์ง
- ๋๋ฒ๊น ์ถ๋ฐ์ → ์ด๋์ ๋ฐ์ํ๋์ง
- Throwable์ printStackTrace๋ ๋ฉ์๋ ํธ์ถ ์คํ ์ ๋ณด ์กฐํ ๊ฐ๋ฅ
- throws์ ๋ชฉ์ ๊ณผ API ํ์ฉ
- API๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ ์ฌ์ ์์ธ ๋ฐ์ ๊ฐ๋ฅ์ ์ ์ธ๋ถ์ ๋ช ์ (์์ธ ๋ฐ์ - ์์ธ ์ ํ)
- ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ๊ฐ์ (์ํฉ ์ธ์ง - ์ ์ ํ ์์ธ ์ฒ๋ฆฌ)
2๏ธโฃ ๋ฉ์๋ ์ฌ์ ์์ throws
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ 5๊ฐ์ง role
- ์ด๋ฆ, ํ๋ผ๋ฏธํฐ, ๋ฆฌํดํ์ , ์ ๊ทผ์ ํ์, ์์ธ์ฒ๋ฆฌ
- ๋ฉ์๋ ์ฌ์ ์ ์ ์กฐ์ ํด๋์ค ๋ฉ์๋๊ฐ ๋์ง๋ ์์ธ๋ณด๋ค ๋ถ๋ชจ์์ธ๋ฅผ ๋์ง ์ X
- ์ฆ, ๋ถ๋ชจ๊ฐ ์น์ง ์์ ์ฌ๊ณ ๋ฅผ ์์์ด ์น ์ X
3๏ธโฃ ์์ธ ๋ณํ
- ํ์ ๊ณ์ธต์์ ๋ฐ์ํ ์์ธ๋ ์์ ๊ณ์ธต์ ๋ง๋ ์์ธ๋ก ๋ฐ๊ฟ์ ๋์ ธ์ผ ํจ.
- ์ฝ๊ฒ ๋งํด, ๋ฐฐ์ก ์ธก์์ ๋ฐ์ ๋ฌธ์ ์ฌํญ์ ์ถ๊ฐ๋ก ๊ฐ๊ณตํด์ฃผ๊ณ ์๋ก ๊ฐ๊ณต๋ ๊ฑธ ๊ณ ๊ฐ์๊ฒ ์ ๋ฌํด์ฃผ๋ ๊ฒ
- Exception Chaining
- ํ์ ๊ณ์ธต์์ ๋ฐ์ํ ์์ธ ์ ๋ณด๊ฐ ์์ ๊ณ์ธต์ ์์ธ๋ฅผ ๋๋ฒ๊น ํ๋๋ฐ ์ ์ฉํ ๊ฒฝ์ฐ ์ฌ์ฉ
- ํ์ ๊ณ์ธต์ ์์ธ๋ฅผ ์์ธ์ผ๋ก ์์ ๊ณ์ธต์์ ์์ธ๋ฅผ ๋ฐ์
๐ ์ฌ์ฉ์ ์ ์ ์์ธ
1๏ธโฃ ์ฌ์ฉ์ ์ ์ ์์ธ
- API์ ์ ์๋ exception ์ธ ํ์์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ ์ ์์ธ ํด๋์ค ์์ฑ
- ๋๋ถ๋ถ Exception or RuntimeException ํด๋์ค ์์๋ฐ์ ์์ฑ
- checked exception ํ์ฉ
- ๋ช ์์ ์์ธ ์ฒ๋ฆฌ or throws ํ์
- ์ฝ๋ ๋ณต์ก → but, ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ ๋ฎ์
- runtime exception ํ์ฉ
- ๋ฌต์์ ์์ธ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์ฝ๋ ๊ฐ๊ฒฐ → but, ์์ธ ์ฒ๋ฆฌ ๋๋ฝ ๊ฐ๋ฅ์ฑ ๋ฐ์
- checked exception ํ์ฉ
- ์ฌ์ฉ์ ์ ์ ์์ธ ์ฅ์
- ๊ฐ์ฒด ํ์ฉ
- ํ์ํ ์ถ๊ฐ์ ๋ณด, ๊ธฐ๋ฅ ํ์ฉ ๊ฐ๋ฅ
- ์ฝ๋ ์ฌ์ฌ์ฉ
- ๋์ผํ ์ํฉ์์ ์์ธ ๊ฐ์ฒด ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- throws ๋ฉ์ปค๋์ฆ ์ด์ฉ
- ์ค๊ฐ ํธ์ถ ๋จ๊ณ์์ return ๋ถํ์
- ๊ฐ์ฒด ํ์ฉ
๋ฐ์ํ
'STUDY > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ํ์ผ ์ ์ถ๋ ฅ (File/IO) (0) | 2024.11.03 |
---|---|
[Java] ์ปฌ๋ ์ (Collection) (1) | 2024.10.30 |
[Java] ์ ๋ค๋ฆญ (Generic) (2) | 2024.10.28 |
[Java] ์ธํฐํ์ด์ค (Interface) (0) | 2024.10.26 |
[Java] ๋คํ์ฑ (Polymorphism) (0) | 2024.10.24 |
Comments