Skip to content

Latest commit

Β 

History

History
100 lines (71 loc) Β· 5.12 KB

README.md

File metadata and controls

100 lines (71 loc) Β· 5.12 KB

였λ₯˜λž€ μ‹œμŠ€ν…œμ΄ μ’…λ£Œλ˜μ–΄μ•Ό ν•  μˆ˜μ€€μ˜ 상황과 같이 μˆ˜μŠ΅ν•  수 μ—†λŠ” μ‹¬κ°ν•œ 문제λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
κ°œλ°œμžκ°€ 미리 μ˜ˆμΈ‘ν•˜μ—¬ 방지할 수 μ—†μŠ΅λ‹ˆλ‹€.

μ˜ˆμ™ΈλŠ” κ°œλ°œμžκ°€ κ΅¬ν˜„ν•œ λ‘œμ§μ—μ„œ λ°œμƒν•œ μ‹€μˆ˜λ‚˜ μ‚¬μš©μžμ˜ 영ν–₯에 μ˜ν•΄ λ°œμƒν•©λ‹ˆλ‹€.
였λ₯˜μ™€ 달리 κ°œλ°œμžκ°€ 미리 μ˜ˆμΈ‘ν•˜μ—¬ 방지 ν•  수 있기 λ•Œλ¬Έμ— 상황에 λ§žλŠ” μ˜ˆμ™Έ 처리(Exception Handle)을 ν•΄μ•Όν•©λ‹ˆλ‹€.


πŸ’‘ Throwable
Error와 Exception λͺ¨λ‘ μžλ°”μ˜ μ΅œμƒμœ„ 클래슀인 Objectλ₯Ό 상속 λ°›μŠ΅λ‹ˆλ‹€.
그리고 κ·Έ 사이 Throwableμ΄λΌλŠ” ν΄λž˜μŠ€λŠ” 이 클래슀의 객체에 였λ₯˜λ‚˜ μ˜ˆμ™Έμ— λŒ€ν•œ λ©”μ‹œμ§€λ₯Ό λ‹΄κ±°λ‚˜,
μ˜ˆμ™Έκ°€ 연결될 λ•Œ(Chained Exception) μ—°κ²°λœ μ˜ˆμ™Έμ˜ 정보듀을 κΈ°λ‘ν•˜λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
이 Throwable 객체가 가진 정보와 ν•  수 μžˆλŠ” ν–‰μœ„λŠ” getMessage()와 printStackTrace()κ°€ μžˆμŠ΅λ‹ˆλ‹€.

Error

μ—λŸ¬(Error)λž€ 컴퓨터 ν•˜λ“œμ›¨μ–΄μ˜ μ˜€λ™μž‘ λ˜λŠ” κ³ μž₯으둜 인해 μ‘μš©ν”„λ‘œκ·Έλž¨μ— 이상이 μƒκ²Όκ±°λ‚˜ JVM 싀행에 λ¬Έμ œκ°€ 생겼을 경우 λ°œμƒν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
μ‹œμŠ€ν…œ λ ˆλ²¨μ—μ„œ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— κ°œλ°œμžκ°€ 미리 μ˜ˆμΈ‘ν•˜μ—¬ μ²˜λ¦¬ν•  수 μ—†κΈ° λ•Œλ¬Έμ—, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 였λ₯˜μ— λŒ€ν•œ 처리λ₯Ό μ‹ κ²½ 쓰지 μ•Šμ•„λ„ λ©λ‹ˆλ‹€.


  • StackOverflowError: 호좜의 κΉŠμ΄κ°€ κΉŠμ–΄μ§€κ±°λ‚˜ μž¬κ·€κ°€ μ§€μ†λ˜μ–΄ stack overflow λ°œμƒ μ‹œ λ˜μ Έμ§€λŠ” 였λ₯˜μž…λ‹ˆλ‹€.
  • OutOfMemoryError: JVM이 ν• λ‹Ήλœ λ©”λͺ¨λ¦¬μ˜ λΆ€μ‘±μœΌλ‘œ 더 이상 객체λ₯Ό ν• λ‹Ήν•  수 없을 λ•Œ λ˜μ Έμ§€λŠ” 였λ₯˜μž…λ‹ˆλ‹€. Garbage Collector에 μ˜ν•΄ 좔가적인 λ©”λͺ¨λ¦¬κ°€ ν™•λ³΄λ˜μ§€ λͺ»ν•˜λŠ” 상황이기도 ν•©λ‹ˆλ‹€.

Exception

μ˜ˆμ™Έ(Exception)λž€ κ°œλ°œμžκ°€ κ΅¬ν˜„ν•œ λ‘œμ§μ—μ„œ λ°œμƒν•œ μ‹€μˆ˜λ‚˜ μ‚¬μš©μžμ˜ 영ν–₯에 μ˜ν•΄ λ°œμƒν•©λ‹ˆλ‹€.
컴파일 μ‹œ λ°œμƒν•  수 μžˆλŠ” 일반 μ˜ˆμ™Έ Exception와 μ‹€ν–‰ 쀑에 λ°œμƒν•˜λŠ” λŸ°νƒ€μž„ μ˜ˆμ™Έ RuntimeException둜 κ΅¬λΆ„λ©λ‹ˆλ‹€.


일반 μ˜ˆμ™ΈλŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό .class 파일둜 μ»΄νŒŒμΌν•˜λŠ” κ³Όμ •μ—μ„œ JVM이 λ˜μ§€λŠ” μ—λŸ¬λ‘œ, λŒ€λΆ€λΆ„ μ†ŒμŠ€μ½”λ“œ 자체의 문법적 였λ₯˜λ‘œ 인해 λ°œμƒν•©λ‹ˆλ‹€.
ν”„λ‘œκ·Έλž¨ μžμ²΄μ—μ„œ μ²˜λ¦¬ν•  수 μžˆλŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€.
일반 μ˜ˆμ™Έμ˜ μ˜ˆλ‘œλŠ” ClassNotFoundException, IllegalAccessException, NoSuchMethodException등이 μžˆμŠ΅λ‹ˆλ‹€.

  • IllegalArgumentException: λ©”μ„œλ“œκ°€ ν—ˆκ°€λ˜μ§€ μ•Šκ±°λ‚˜ λΆ€μ μ ˆν•œ argumentλ₯Ό λ°›μ•˜μ„ κ²½μš°μ— λ˜μ Έμ§€λŠ”/던질 수 μžˆλŠ” μ˜ˆμ™Έμž…λ‹ˆλ‹€.

λŸ°νƒ€μž„ μ˜ˆμ™ΈλŠ” 문법적인 였λ₯˜κ°€ μ—†μ–΄ 컴파일 μ‹œμ—λŠ” μ •μƒμ μœΌλ‘œ μ»΄νŒŒμΌλμ§€λ§Œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό λ§ν•©λ‹ˆλ‹€.
μ΄λŠ” κ°œλ°œμžκ°€ 직접 였λ₯˜λ₯Ό ν™•μΈν•˜μ—¬ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.
λŸ°νƒ€μž„ μ˜ˆμ™Έμ˜ μ˜ˆλ‘œλŠ” NullPointerException, ArithmeticException, IndexOutOfBoundsException 등이 μžˆμŠ΅λ‹ˆλ‹€.

  • NullPointerException: 객체가 ν•„μš”ν•œ 경우인데 μ‘μš©ν”„λ‘œκ·Έλž¨μ΄ null을 μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•  경우 λ˜μ Έμ§€λŠ”/던질 수 μžˆλŠ” μ˜ˆμ™Έμž…λ‹ˆλ‹€.

μ˜ˆμ™ΈλŠ” 였λ₯˜μ™€ 달리 κ°œλ°œμžκ°€ 미리 μ˜ˆμΈ‘ν•˜μ—¬ 방지할 수 있기 λ•Œλ¬Έμ— 상황에 λ§žλŠ” μ˜ˆμ™Έμ²˜λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

μ˜ˆμ™Έ 처리 Exception Handle

try... catch... finally

μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œ try... catch... finally λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κ±°λ‚˜ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œ 곳으둜 던질 수 μžˆμŠ΅λ‹ˆλ‹€.

  • try: μ˜ˆμ™Έκ°€ λ°œμƒν•œ λ§Œν•œ μ½”λ“œκ°€ μž‘μ„±λ©λ‹ˆλ‹€.
  • catch: μ˜ˆμ™Έκ°€ λ°œμƒλ˜μ—ˆμ„ λ•Œ μ²˜λ¦¬ν•˜λŠ” λ™μž‘μ„ λͺ…μ‹œν•©λ‹ˆλ‹€. catch 블둝은 μ—¬λŸ¬ κ°œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • finally: μ˜ˆμ™Έ λ°œμƒ μœ λ¬΄μ™€ 상관 없이 κ³΅ν†΅μœΌλ‘œ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  μž„μ‹œ 파일의 μ‚­μ œ λ“± 뒷정리 μ½”λ“œκ°€ μž‘μ„±λ©λ‹ˆλ‹€.
try {
	// μ˜ˆμ™Έκ°€ λ°œμƒλ λ§Œν•œ μ½”λ“œ
} catch(FileNotFoundException e) { // FileNotFoundException이 λ°œμƒν–ˆλ‹€λ©΄

} catch(IOException e) { // IOException이 λ°œμƒν–ˆλ‹€λ©΄

} catch(Exception e) { // Exception이 λ°œμƒν–ˆλ‹€λ©΄

} finally {
	// μ–΄λ–€ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ˜ 말던 무쑰건 μ‹€ν–‰
}

throws

μ˜ˆμ™Έλ₯Ό λ°”λ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  μ˜ˆμ™Έλ₯Ό λ˜μ Έμ„œ μ–΄λ–€ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆλŠ”μ§€ μ•Œλ¦¬λŠ” μš©λ„λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

public static void divide(int a,int b) throws ArithmeticException {
	if(b==0) throw new ArithmeticException("0으둜 λ‚˜λˆŒ μˆ˜λŠ” μ—†λ‹€λ‹ˆκΉŒ?");
	int c=a/b;
	System.out.println(c);
}
public static void main(String[] ar){
	int a=10;
	int b=0;

	divide(a,b);
}
βœ… throw vs throws
πŸ’‘ throw
λ©”μ„œλ“œ λ‚΄μ—μ„œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
throw new FoolException()

πŸ’‘ thorws
λ©”μ„œλ“œ μ„ μ–ΈλΆ€μ—μ„œ μ‚¬μš©λ˜λ©°, ν•΄λ‹Ή λ©”μ„œλ“œκ°€ μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ μ˜ˆμ™Έλ₯Ό ν˜ΈμΆœμžμ—κ²Œ 전달함을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
public void sayNick(String nick) throws FoolException