โ Java ์์ธ ์ฒ๋ฆฌ ์์ ์ ๋ณต (Throwable / Error / Exception / try-catch-finally / throws / ์ฌ์ฉ์ ์ ์ ์์ธ)
1) ์์ธ(์ค๋ฅ)๋ “ํด๋์ค”๋ค: ์ต์์ Throwable
์๋ฐ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฑธ ํํํ๋ ๊ฒ๋ค์ ์ ๋ถ ํด๋์ค๋ก ๋์ด ์๊ณ , ๊ทธ ์ต์์ ๋ถ๋ชจ๊ฐ ๋ฐ๋ก:
- java.lang.Throwable
์ฆ, ๋์ง ์(throw) ์๋ ๊ฐ์ฒด๊ฐ Throwable ๊ณ์ด์ด์ผ.
๊ณ์ธต ๊ตฌ์กฐ๋ ํฌ๊ฒ ์ด๋ ๊ฒ ๊ฐ๋ผ์ ธ:

2) Error vs Exception — ์ ์ด ๋์์ด ๋ค๋ฅด๋ค
โ Error : “ํ๋ก๊ทธ๋จ์ด ์ด์ฉ ์ ์๋” ์์คํ ๊ธ ๋ฌธ์
- JVM/์์คํ ์ด ์ฌ๊ฐํ๊ฒ ๋ง๊ฐ์ง ์ํฉ
- ๋ณดํต ์ฝ๋๋ก ๋ณต๊ตฌํ๋ ค๊ณ ํ์ง ์์
- ์: OutOfMemoryError, StackOverflowError
๊ฒฐ๋ก : ๋๋ถ๋ถ catch ํ์ง ์๋๋ค.
“๋ ์ง๊ธ ์จ๋ ๋ชป ์ฌ๊ฒ ์ด” ์์ค์ด๋ผ ํ๋ก๊ทธ๋จ์ด ์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต๋ค.
โ Exception : “ํ๋ก๊ทธ๋จ์ด ์์ํ๊ณ ์ฒ๋ฆฌ ๊ฐ๋ฅํ” ๋ฌธ์
- ์ ๋ ฅ์ด ์๋ชป๋จ, ํ์ผ์ด ์์, ๋คํธ์ํฌ ๋๊น ๋ฑ
- ์ฐ๋ฆฌ๊ฐ try-catch๋ก ๋ค๋ฃจ๋ ํต์ฌ ์์ญ
3) Exception ์์์๋ ํต์ฌ 2์ข ๋ฅ: Checked vs Unchecked
(1) โ Checked Exception (์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ )
๋ํ: IOException, FileNotFoundException, ClassNotFoundException
ํน์ง:
- ์ปดํ์ผ๋ฌ๊ฐ “์ด๊ฑฐ ์ฒ๋ฆฌ ์ ํ๋ฉด ์ปดํ์ผ ์ ๋จ”์ด๋ผ๊ณ ๊ฐ์ ํจ
- ๊ทธ๋์ ์๋ ๋ ์ค ํ๋๋ฅผ ํด์ผ ํจ
- try-catch๋ก ์ฒ๋ฆฌ
- ๋ฉ์๋์ throws๋ก ๋ ๋๊ธฐ๊ธฐ
(2) โ Unchecked Exception = RuntimeException (์คํ ์ค ๋ฐ์)
๋ํ: NumberFormatException, NullPointerException, IndexOutOfBoundsException
ํน์ง:
- ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ ํ์ง ์์
- ๋ณดํต ์ฝ๋ ์ค์/๋ก์ง ๋ฌธ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์
(๋ฌผ๋ก ์ ๋ ฅ๊ฐ ๊ฒ์ฆ ๊ฐ์ “์์ธก ๊ฐ๋ฅ ์ํฉ”์์๋ ๋ง์ด ์)
4) try ~ catch ~ finally: “ํฐ์ง ์ ์๋ ๊ณณ”์ ์์ ํ๊ฒ ๊ฐ์ธ๋ ๋ฐฉ๋ฒ
โ 4-1) try : ์์ธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋

"ABC"๋ ์ซ์๊ฐ ์๋๋๊น Integer.parseInt()๊ฐ ๋ณํํ๋ค๊ฐ ํฐ์ ธ์
NumberFormatException(๋ฐํ์ ์์ธ)์ด ๋ฐ์ํด.
โ 4-2) catch : ํฐ์ก์ ๋ ์ฒ๋ฆฌํ๋ ์ฝ๋

์ฌ๊ธฐ์ ์ค์ํ ํฌ์ธํธ:
- e.getMessage() : “์ ํฐ์ก๋์ง” ์งง์ ๋ฉ์์ง
- e.printStackTrace() : ์ด๋์ ํฐ์ก๋์ง (ํธ์ถ ๊ฒฝ๋ก ์ ์ฒด) ์ถ๋ ฅ
→ ๋๋ฒ๊น ํ ๋ ์ง์ง ์ค์ํด
โ 4-3) finally : “๋ฌด์กฐ๊ฑด ์คํ๋๋ ๋ง๋ฌด๋ฆฌ ์์ ”

finally๋ try๊ฐ ์ฑ๊ณตํ๋ ์คํจํ๋ ๊ฑฐ์ ํญ์ ์คํ๋ผ.
๐ ๋ณดํต finally๋ ์ด๋ฐ “๋ท์ ๋ฆฌ”์ ์:
- ํ์ผ ๋ซ๊ธฐ
- DB ์ฐ๊ฒฐ ์ข ๋ฃ
- ์ ๊ธ(lock) ํด์
- ๋ก๊ทธ ๋จ๊ธฐ๊ธฐ
์ฐธ๊ณ ๋ก, ์์ฆ์ ํ์ผ/์คํธ๋ฆผ ์ข ๋ฃ๋ try-with-resources๋ฅผ ๋ ๊ถ์ฅํด (์๋์์ ์ค๋ช ํ ๊ฒ).
5) throws : “์ฌ๊ธฐ์ ์ฒ๋ฆฌ ์ ํ๊ณ , ํธ์ถํ ๊ณณ์๊ฒ ๋๊น”
๋ค ์ด๋ฏธ์ง์ ํต์ฌ ๋ฌธ์ฅ์ด ์ด๊ฑฐ์์ง:
“throw๋ฅผ ์ฌ์ฉํด ํด๋น ๋ฉ์๋์์ ์ฒ๋ฆฌํ์ง ์๊ณ ๋ฏธ๋ฃฌ ํ, ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ถ๋ถ์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.”
์ฌ๊ธฐ์ ์ ํํ ๋งํ๋ฉด,
- **throws**๋ “์ด ๋ฉ์๋๋ ์ด๋ฐ ์์ธ๋ฅผ ๋์ง ์ ์์ด์”๋ผ๊ณ ์ ์ธํ๋ ๊ฑฐ์ผ.
์์(์ด๋ฏธ์ง์ ๋์ผํ ํ๋ฆ):

- FileInputStream: ํ์ผ์ ์ฝ๊ธฐ ์ํ ์คํธ๋ฆผ ํด๋์ค
- FileNotFoundException: ํ์ผ์ด ์์ ๋ ๋๋ Checked Exception (์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌ ๊ฐ์ )
- loadClass(fileName, className) ๋ฉ์๋:
- ํ์ผ์ ์ด๊ณ (fileName)
- ํด๋์ค ์ด๋ฆ์ผ๋ก ํด๋์ค๋ฅผ ์ฐพ์์(className)
- ๊ทธ Class ๊ฐ์ฒด๋ฅผ ๋ฐํํจ
- ํต์ฌ: throws FileNotFoundException, ClassNotFoundException
- ์ด ๋ฉ์๋ ์์์ ์ด๋ฐ ์์ธ๋ค์ด ๋ฐ์ํ ์ ์๋๋ฐ,
- ์ฌ๊ธฐ์ try-catch๋ก ์ฒ๋ฆฌํ์ง ์๊ณ
- **“์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์์ ์ฒ๋ฆฌํด๋ผ”**๋ผ๊ณ ์์ํ๋ ์ ์ธ์ด์ผ.
- FileInputStream fis = new FileInputStream(fileName);
์ค์ ๋ก ํ์ผ์ ์ด๋ ค๊ณ ์๋ํจ ๋ง์ฝ "a.txt"๊ฐ ์์ผ๋ฉด ์ฌ๊ธฐ์ ๋ฐ๋ก FileNotFoundException ๋ฐ์
๊ทธ๋ฆฌ๊ณ ์ด ์์ธ๋ throws๋ก ์ ์ธ๋์ด ์์ผ๋,์ด ๋ฉ์๋ ์์์ ์ ์ก์๋ ๋๊ณ ํธ์ถํ ๊ณณ์ผ๋ก ๋์ ธ์ง(์ ํ๋จ) - Class c = Class.forName(className);
๋ฌธ์์ด๋ก ๋ ํด๋์ค ์ด๋ฆ์ ๋ณด๊ณ ํด๋์ค๋ฅผ ๋ก๋ฉํจ์: "java.lang.String"์ ์กด์ฌํ๋๊น ์ฑ๊ณต
๊ทธ๋ฐ๋ฐ ๋ง์ฝ "java.lang.Strinnng" ๊ฐ์ด ์คํ๋ฉด? ClassNotFoundException ๋ฐ์ (Checked)
- ์ ๋ ๊ณผ์ ์ด ์ฑ๊ณตํ๋ฉด Class ๊ฐ์ฒด๋ฅผ ๋๋ ค์ค
- ์ค๊ฐ์ ์์ธ ํฐ์ง๋ฉด ์ฌ๊ธฐ๊น์ง ๋ชป ์ด (๋ฐ๋ก ์ค๋จ)
} catch (FileNotFoundException e) {
e.printStackTrace();
- ํ์ผ์ด ์๋ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ก๋๋ค
- printStackTrace()๋ “์ด๋์ ํฐ์ก๋์ง” ๋ก๊ทธ ์ฐ๊ธฐ
} catch (ClassNotFoundException e) {
e.printStackTrace();
ํด๋์ค ๋ชป ์ฐพ์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ก๋๋ค
โ ์ด ์ฝ๋์ ๋ฉ์์ง
- loadClass()๋ ์ฒ๋ฆฌํ์ง ์๊ณ throws๋ก ๋๊น
- main()์์ try-catch๋ก ์ฒ๋ฆฌํจ
- ์ด๊ฒ “ํธ์ถ์์๊ฒ ์ฑ ์์ ์์ํ๋ ๊ตฌ์กฐ”์ผ.
โ catch ์์๊ฐ ์ค์ํ ์ด์
- ๊ตฌ์ฒด์ ์ธ ์์ธ → ๋ ํฐ ์์ธ ์์๋ก ์ก์์ผ ํด.
- ์๋๋ฉด Exception์ด ๋จผ์ ์ค๋ฉด, ์๋์ ๊ตฌ์ฒด ์์ธ๋ค์ “๋๋ฌ ๋ถ๊ฐ ์ฝ๋”๊ฐ ๋ผ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋.
โ ์ฌ๋ฐ๋ฅธ ์์:
- FileNotFoundException
- ClassNotFoundException
- Exception
6) throw vs throws ์ฐจ์ด ํ ๋ฐฉ์ ์ ๋ฆฌ
| throw | ์์ธ๋ฅผ ์ค์ ๋ก ๋ฐ์์ํด(๋์ง) | ์ฝ๋ ์คํ ์์น | throw new IllegalArgumentException("์๋ชป๋ ๊ฐ"); |
| throws | ์ด ๋ฉ์๋๊ฐ ๋์ง ์ ์๋ค๊ณ ์ ์ธ | ๋ฉ์๋ ์ ์ธ๋ถ | public void a() throws IOException {} |

'๐ฉโ๐ปDeveloper ๐ก > ๐พBack-end๐๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Java ์ ๋ค๋ฆญ(Generic) ์์ ์ ๋ณต (0) | 2026.02.12 |
|---|---|
| JAVA ์ปฌ๋ ์ ์๋ฃ๊ตฌ์กฐ (0) | 2026.02.11 |
| Java 8. Interface (0) | 2026.02.10 |
| JAVA : ์์ (0) | 2026.02.10 |
| Java ์์:๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ (0) | 2026.02.09 |