λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
TIL

01/15(μ›”) 내일배움캠프 Java 16일차 TIL - μ˜ˆμ™Έμ²˜λ¦¬

by 감자개발꾼 2024. 1. 15.

 

πŸ“–  μ˜€λŠ˜μ˜ ν•™μŠ΅ ν‚€μ›Œλ“œ

  • μ˜ˆμ™Έμ²˜λ¦¬

 

πŸ₯”  였λ₯˜μ™€ μ˜ˆμ™Έ

였λ₯˜(error)λŠ” 일반적으둜 회볡이 λΆˆκ°€λŠ₯ν•œ 문제
  • 였λ₯˜λŠ” μ‹œμŠ€ν…œ λ ˆλ²¨μ—μ„œ, λ˜λŠ” ν™˜κ²½μ μΈ 이유둜 λ°œμƒ
  • μ½”λ“œμ˜ 문제둜 λ°œμƒν•˜λŠ” κ²½μš°λ„ μžˆμ§€λ§Œ, 였λ₯˜λŠ” λ°œμƒν•˜λŠ” 경우 일반적으둜 회볡이 λΆˆκ°€λŠ₯
  • μ—λŸ¬κ°€ λ°œμƒν•œ 경우, μš°λ¦¬λŠ” μ–΄λ– ν•œ μ—λŸ¬λ‘œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜μ—ˆλŠ”μ§€λ₯Ό ν™•μΈν•˜κ³  λŒ€μ‘
μ˜ˆμ™Έ(Exception)λŠ” 일반적으둜 회볡이 κ°€λŠ₯ν•œ 문제
  • 회볡이 κ°€λŠ₯ν•˜λ‹€λŠ” 것은 μš°λ¦¬κ°€ κ·Έ μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆλ‹€λŠ” 것을 μΈμ§€ν•˜κ³ , λŒ€μ‘ν–ˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • ν˜„μ‹€μ μœΌλ‘œ μ½”λ“œλ ˆλ²¨μ—μ„œ ν•  수 μžˆλŠ” λ¬Έμ œμƒν™©μ— λŒ€ν•œ λŒ€μ‘μ€ μ˜ˆμ™Έμ²˜λ¦¬μ— μ†ν•©λ‹ˆλ‹€.

 

 

πŸ₯”  μ˜ˆμ™Έμ˜ μ’…λ₯˜

μ½”λ“œμ‹€ν–‰ κ΄€μ μ—μ„œ μ˜ˆμ™Έμ˜ μ’…λ₯˜

 

  • 컴파일 μ—λŸ¬(μ˜ˆμ™Έ)
  • .java νŒŒμΌμ„ .class 파일둜 μ»΄νŒŒμΌν•  λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬
  • λŒ€λΆ€λΆ„ μžλ°” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ κ·œμΉ™μ„ 지킀지 μ•Šμ•˜κΈ° λ•Œλ¬Έμ— λ°œμƒ
  • 예λ₯Ό λ“€μ–΄ μžˆμ§€ μ•Šμ€ 클래슀λ₯Ό ν˜ΈμΆœν•œλ‹€κ±°λ‚˜, μ ‘κ·Ό λΆˆκ°€λŠ₯ν•œ ν”„λ‘œνΌν‹°λ‚˜ λ©”μ†Œλ“œμ— μ ‘κ·Όν•˜λŠ” κ²½μš°μ— λ°œμƒ
  • 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” 경우 해결방법은 문법에 맞게 λ‹€μ‹œ μž‘μ„±

 

  • λŸ°νƒ€μž„ μ—λŸ¬(μ˜ˆμ™Έ)
  • 문법적인 였λ₯˜λŠ” μ•„λ‹ˆλΌμ„œ, μ»΄νŒŒμΌμ€ 잘 λ˜μ—ˆμ§€λ§Œ, ν”„λ‘œκ·Έλž¨μ΄ 싀행도쀑 맞λ‹₯뜨리게 λ˜λŠ” μ˜ˆμ™Έ

 

μ˜ˆμ™Έμ²˜λ¦¬ κ΄€μ μ—μ„œ μ˜ˆμ™Έμ˜ μ’…λ₯˜

 

  • ν™•μΈλœ μ˜ˆμ™Έ (Checked Exception)
  • 컴파일 μ‹œμ μ— ν™•μΈν•˜λŠ” μ˜ˆμ™Έ
  • λ°˜λ“œμ‹œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό 해주어야함
πŸ“ 컴파일 μ‹œμ μ— ν™•μΈν•˜λŠ” μ˜ˆμ™ΈλΌλŠ” 문ꡬ λ•Œλ¬Έμ—, 컴파일 μ—λŸ¬μ™€ ν—·κ°ˆλ¦¬λ©΄ μ•ˆ λœλ‹€.
μš°λ¦¬κ°€ 이미 νŠΉμ •ν•œ 문제λ₯Ό μΈμ§€ν•˜κ³  μžˆμ–΄μ„œ, ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό μ •μ˜ν•΄ λ‘μ—ˆκ³ , κ·Έλ ‡κΈ° λ•Œλ¬Έμ—
μ»΄νŒŒμΌν•˜λŠ” λ™μ•ˆ 이 μ˜ˆμ™Έμ— λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν–ˆλŠ”μ§€ 확인할 수 μžˆλŠ” μ˜ˆμ™Έ

즉, Checked Exception에 λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒ

 

 

 

  • λ―Έν™•μΈλœ μ˜ˆμ™Έ (Unchecked Exception)
  • λŸ°νƒ€μž„ μ‹œμ μ— ν™•μΈλ˜λŠ” μ˜ˆμ™Έ
  • μ˜ˆμ™Έμ²˜λ¦¬κ°€ λ°˜λ“œμ‹œ ν•„μš”ν•˜μ§€ μ•Šμ€ μ˜ˆμ™Έ

 

 

πŸ₯”  try-catch, finally

- μ˜ˆμ™Έ μ •μ˜ν•˜κΈ°

class OurBadException extends Exception {
	public OurBadException() {
		super("μœ„ν—˜ν•œ 행동을 ν•˜λ©΄ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό κΌ­ ν•΄μ•Όν•©λ‹ˆλ‹€!");
	}
}

 

- 클래슀λ₯Ό λ§Œλ“€κ³ , λ©”μ„œλ“œλ₯Ό λ§Œλ“€λ©° 우리의 λ©”μ„œλ“œκ°€ μœ„ν—˜ν•˜λ‹€κ³  μ•Œλ¦¬κΈ°(throw, throws)

class OurClass {
    private final Boolean just = true;
		
    public void thisMethodIsDangerous() throws OurBadException {
        if (just) {
            throw new OurBadException();
        }
    }
}

 

- μœ„ν—˜ν•œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄, μ˜ˆμ™Έλ₯Ό ν•Έλ“€λ§ν•˜κΈ°

public class StudyException {
    public static void main(String[] args) {
        OurClass ourClass = new OurClass();

        try {
            // 1. μœ„ν—˜ν•œ λ©”μ†Œλ“œμ˜ 싀행을 "μ‹œλ„" ν•΄ λ΄…λ‹ˆλ‹€.
            // "μ‹œλ„" ν•΄λ³΄λŠ” μ½”λ“œκ°€ λ“€μ–΄κ°€λŠ” λΈ”λŸ­μž…λ‹ˆλ‹€.
            ourClass.thisMethodIsDangerous();
        } catch (OurBadException e) {
            // 2. μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄, "μž‘μ•„μ„œ" handling ν•©λ‹ˆλ‹€.
            // μ˜ˆμ™Έκ°€ λ°œμƒν•˜λŠ”κ²½μš° "handling" ν•˜λŠ” μ½”λ“œκ°€ λ“€μ–΄κ°€λŠ” λΈ”λŸ­μž…λ‹ˆλ‹€.
						// 즉 try λΈ”λŸ­ λ‚΄μ˜ ꡬ문을 μ‹€ν–‰ν•˜λ‹€κ°€ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄
						// μ˜ˆμ™Έκ°€ λ°œμƒν•œ μ€„μ—μ„œ λ°”λ‘œ μ½”λ“œ 싀행을 λ©ˆμΆ”κ³ 
						// μ—¬κΈ° μžˆλŠ” catch λΈ”λŸ­ λ‚΄μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
            System.out.println(e.getMessage());
        } finally {
            // 3. μ˜ˆμ™Έμ˜ λ°œμƒ 여뢀와 상관없이, μ‹€ν–‰μ‹œμΌœμ•Ό ν•˜λŠ” μ½”λ“œκ°€ λ“€μ–΄κ°‘λ‹ˆλ‹€.
            // 무쑰건 μ‹€ν–‰λ˜λŠ” μ½”λ“œκ°€ λ“€μ–΄κ°€λŠ” λΈ”λŸ­μž…λ‹ˆλ‹€.
            System.out.println("μš°λ¦¬λŠ” 방금 μ˜ˆμ™Έλ₯Ό handling ν–ˆμŠ΅λ‹ˆλ‹€!");
        }

    }
}

 

 

 

 

 

πŸ“š  μ˜€λŠ˜μ˜ 회고

μ˜ˆμ™Έμ²˜λ¦¬μ— λŒ€ν•΄μ„œ μ΄ν•΄λŠ” ν–ˆμ§€λ§Œ, μ‘μš©μ„ ν•  수 μžˆμ„μ§€λŠ” λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

반볡된 ν•™μŠ΅μ„ 톡해 λ”μš±λ” 깊이 μ΄ν•΄ν•˜κ³ 

μ‘μš©μ„ ν•  수 μžˆμ„ λ•ŒκΉŒμ§€ λ°˜λ³΅μˆ™λ‹¬ν•˜κ² μŠ΅λ‹ˆλ‹€.