Java ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

2026. 2. 11. 14:19ยท๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก/๐Ÿ’พBack-end๐Ÿ•Š๏ธ

โ˜• 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

ํŠน์ง•:

  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ “์ด๊ฑฐ ์ฒ˜๋ฆฌ ์•ˆ ํ•˜๋ฉด ์ปดํŒŒ์ผ ์•ˆ ๋จ”์ด๋ผ๊ณ  ๊ฐ•์ œํ•จ
  • ๊ทธ๋ž˜์„œ ์•„๋ž˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ•ด์•ผ ํ•จ
    1. try-catch๋กœ ์ฒ˜๋ฆฌ
    2. ๋ฉ”์„œ๋“œ์— 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์ด ๋จผ์ € ์˜ค๋ฉด, ์•„๋ž˜์˜ ๊ตฌ์ฒด ์˜ˆ์™ธ๋“ค์€ “๋„๋‹ฌ ๋ถˆ๊ฐ€ ์ฝ”๋“œ”๊ฐ€ ๋ผ์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜.

โœ… ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ:

  1. FileNotFoundException
  2. ClassNotFoundException
  3. 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
'๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก/๐Ÿ’พBack-end๐Ÿ•Š๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Java ์ œ๋„ค๋ฆญ(Generic) ์™„์ „ ์ •๋ณต
  • JAVA ์ปฌ๋ ‰์…˜ ์ž๋ฃŒ๊ตฌ์กฐ
  • Java 8. Interface
  • JAVA : ์ƒ์†
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
Quantitative Research Engineer & Quantitative Strategist | Multimodal Alpha (Price/News/On-chain) | Regime-aware, Cost-included Backtests | Remote-first ์—ฐ๋ฆฌ์˜ ๋‚œ ๋จธ๋‹ˆ๐Ÿ’ฐ๊ฐ€ ์ข‹์•„๐Ÿ’™๐Ÿฅณ ์ถฉ๋งŒํ•˜๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ์ฆ๊ฒ๊ฒŒ ๐Ÿถ ๐Ÿฆซ ๐Ÿ’›
  • fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
    Yeona's Diary
    Quantitative Researcher & Engineer
    AboutMe ๋ชฉํ‘œ GitHub Blog
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿค ๐Ÿ˜Ž ์•ˆ๋…•โ˜ƒ๏ธ๐Ÿ’ž (103) N
      • ๐Ÿ’™ ๐Ÿค Diary๐Ÿฐ ๐ŸŽ€ ๐Ÿงธ (39) N
        • ๐Ÿ—ฝ๋ฏธ๊ตญ DS & CS ๋ฐ•์‚ฌ ์ด๋ฏผ๐Ÿ‹ (28)
        • ๐Ÿ›ซ์—ฌํ–‰ ์ด์•ผ๊ธฐ (1)
        • ๐Ÿ“’์˜ค๋Š˜ ์ด์•ผ๊ธฐ๐Ÿ’’๐Ÿซง๐ŸŒค๏ธ (6) N
        • ๐Ÿฐโ˜˜๏ธ๐Ÿป‍โ„๏ธ๊ฐ•์•„์ง€ ์œก์•„ (0)
      • ๐ŸฌActuary๐Ÿคธ‍โ™€๏ธโœจ (1)
      • ๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก (5) N
        • โš’๏ธ์‚ฝ์งˆ ๊ธฐ๋ก๊ธฐ๐Ÿ“[TIL] (6)
        • ๐Ÿ–ผ๏ธFront-end๐ŸŽจ (3)
        • ๐Ÿ’พBack-end๐Ÿ•Š๏ธ (15)
        • ๐Ÿคน‍โ™€๏ธAlgorithm & Coding Test๐Ÿ’ƒ (5)
        • ๐Ÿ—ปData๐Ÿ”๏ธ (1)
        • ๐Ÿ“Project๐Ÿ• (8) N
      • ๐Ÿ’ฐ๊ฒฝ์ œ์  ์ž์œ  ๋‹ฌ์„ฑโœŒ๏ธ๐ŸคŸ (8)
        • ๐Ÿ“ŠQuant๐Ÿ“ˆ๐Ÿ‘ (4)
        • ๐Ÿฐ๐Ÿ›’๐Ÿฅ‡ (1)
        • ๐Ÿ’Ž ํˆฌ์ž ์‹ค์ „ ๊ฒฝํ—˜ โ˜บ๏ธ (1)
        • ๐Ÿ… Bitcoin 15๊ฐœ ๋ชจ์œผ๊ธฐ : 2040๋…„ 200์–ต+ (0)
        • ๐ŸŒŽ๋ฏธ๊ตญ ์‹œ์žฅ๐Ÿฆ (0)
      • ๐ŸŒค๏ธCloud๐ŸŒค๏ธโ˜๏ธ (2)
        • AWS (1)
        • Kubernetes (0)
        • Google Cloud Professional (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • git
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์‹œ์นด๊ณ ๋Œ€
    ๋ฏธ๊ตญ์œ ํ•™
    DS
    ์‹œ์นด๊ณ ๋Œ€ํ•™๊ต
    Java
    ์‹œ์นด๊ณ 
    ๊ฐ€์„ํ•™๊ธฐ
    AWS
    CS
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
Java ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”