[Java] μ˜ˆμ™Έμ²˜λ¦¬ (1)

μ •λ³΄κ΅¬λ‹ˆΒ·2022λ…„ 1μ›” 5일
1

Java

λͺ©λ‘ 보기
36/39
post-thumbnail

μžλ°”μ—μ„œ λ§ν•˜λŠ” μ˜ˆμ™Έ


πŸ”Ž μ˜ˆμ™Έ (Exception)

  • 'μ˜ˆμ™Έμ μΈ 상황'을 쀄여 μ˜ˆμ™ΈλΌ ν•œλ‹€.
  • λ‹¨μˆœν•œ 문법 였λ₯˜κ°€ μ•„λ‹Œ μ‹€ν–‰ 쀑간에 λ°œμƒν•˜λŠ” 정상적이지 μ•Šμ€ 상황을 λœ»ν•œλ‹€.
  • 일반적으둜 μ˜ˆμ™ΈλŠ” ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•˜λŠ” μ‚¬μš©μžκ°€ λ§Œλ“ λ‹€.
    (μ•„λ‹Œ κ²½μš°λ„ 있음)



πŸ”Ž μ˜ˆμ™Έ 처리

  • μ˜ˆμ™Έ 상황에 λŒ€ν•œ 처리λ₯Ό μ˜λ―Έν•œλ‹€.
  • μžλ°”λŠ” μ˜ˆμ™Έμ²˜λ¦¬ λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•œλ‹€.
    ➑ μžλ°”μ˜ κΈ°λ³Έ μ˜ˆμ™Έμ²˜λ¦¬ λ©”μ»€λ‹ˆμ¦˜μ€ λ¬Έμ œκ°€ λ°œμƒν•œ 지점에 λŒ€ν•œ 정보 좜λ ₯κ³Ό ν”„λ‘œκ·Έλž¨ μ’…λ£Œμ΄λ‹€.



πŸ”Ž κ΄€λ ¨ 예제

  • μˆ˜ν•™μ μœΌλ‘œ λΆ„λͺ¨(λ‚˜λˆ„λŠ” 수)λŠ” 0이 될 수 μ—†λŠ”λ° μ‚¬μš©μžκ°€ 0을 μž…λ ₯ν–ˆμ„ 경우 μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.

  • μ˜ˆμ™Έ λ°œμƒ μˆœκ°„μ— ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλœλ‹€.
    ➑ 가상머신은 μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ κ·Έ λ‚΄μš©μ„ κ°„λ‹¨νžˆ 좜λ ₯ν•˜κ³  ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•΄λ²„λ¦°λ‹€.

  • λ˜ν•œ μ‚¬μš©μžκ°€ μˆ«μžκ°€ μ•„λ‹Œ 문자λ₯Ό μž…λ ₯ν–ˆμ„ κ²½μš°μ—λ„ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.

import java.util.Scanner;

public class ExceptionCase {
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);
		
		System.out.print("a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: "); // λΆ„μž μž…λ ₯
		int a = kb.nextInt(); // intν˜• μ •μˆ˜ μž…λ ₯
		
		System.out.print("a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: "); // λΆ„λͺ¨ μž…λ ₯
		int b = kb.nextInt(); // intν˜• μ •μˆ˜ μž…λ ₯
		
		System.out.printf("%d/%d = %d \n", a, b, a/b);
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!");
	}
}


// μ‹€ν–‰ κ²°κ³Ό
a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: 5
a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: 0

// λΆ„λͺ¨κ°€ 0일 경우 μ˜ˆμ™Έμƒν™©μ΄ λ°œμƒν•΄ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ¨μ„ 확인 ν•  수 μžˆλ‹€.
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at ch18.ExceptionCase.main(ExceptionCase.java:18)









μ˜ˆμ™Έμ²˜λ¦¬ λ©”μ»€λ‹ˆμ¦˜ (try ~ catch)


πŸ”Ž μ˜ˆμ™Έ 클래슀

  • μžλ°” 가상머신이 νŠΉμ • μ˜ˆμ™Έμƒν™©μ„ μ•Œλ¦¬κΈ° μœ„ν•΄ λ””μžμΈ 된 ν΄λž˜μŠ€μ΄λ‹€.
  • μ˜ˆμ™Έ 클래슀 μ’…λ₯˜
    • ArithmeticException
      ➑ μˆ˜ν•™ μ—°μ‚°μ—μ„œμ˜ 였λ₯˜ 상황을 μ˜λ―Έν•˜λŠ” μ˜ˆμ™Έν΄λž˜μŠ€
    • InputMismatchException
      ➑ 클래슀 Scannerλ₯Ό ν†΅ν•œ κ°’μ˜ μž…λ ₯μ—μ„œμ˜ 였λ₯˜ 상황을 μ˜λ―Έν•˜λŠ” μ˜ˆμ™Έν΄λž˜μŠ€




πŸ”Ž μ˜ˆμ™Έ 처리

  • μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” try ~ catch문을 μ‚¬μš©ν•œλ‹€.
    ➑ μ˜ˆμ™Έ 처리λ₯Ό μœ„ν•œ μ½”λ“œλ₯Ό λ³„λ„λ‘œ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ λ””μžμΈλœ μ˜ˆμ™Έμ²˜λ¦¬ λ©”μ»€λ‹ˆμ¦˜μ΄ try ~ catch문이닀.

  • try ~ catch문은 try μ˜μ—­κ³Ό catch μ˜μ—­μœΌλ‘œ κ΅¬λΆ„λ˜λŠ”λ°,
    이 λ‘˜μ€ ν•˜λ‚˜μ˜ λ¬Έμž₯μ΄λ―€λ‘œ 항상 μ—°κ²°λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

  • try μ˜μ—­μ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έ 상황을 catch μ˜μ—­μ—μ„œ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

  • try ~ catch문은 μ„±λŠ₯μ €ν•˜λ₯Ό μΌμœΌν‚¬ 수 μžˆλ‹€.

// try ~ catch문 기본 ꡬ쑰
try {
	...κ΄€μ°° μ˜μ—­...
}
catch(Exception e) {
	...처리 μ˜μ—­...
}

  • μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ μžλ°” 가상머신은 μ˜ˆμ™Έ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€κ³ , λ§Œλ“€μ–΄μ§„ μ˜ˆμ™Έ μΈμŠ€ν„΄μŠ€μ˜ 참쑰값이 catch의 λ§€κ°œλ³€μˆ˜ 선언을 톡해 μ „λ‹¬λœλ‹€.

  • λ”°λΌμ„œ catch의 λ§€κ°œλ³€μˆ˜ μ„ μ–Έ νƒ€μž…μ΄ μ˜ˆμ™Έ μΈμŠ€ν„΄μŠ€μ˜ νƒ€μž…κ³Ό 동일해야 ν•œλ‹€.

  • catch문은 λ‘˜ 이상 연이어 μ“Έ 수 μžˆλ‹€.

try {
	...κ΄€μ°° μ˜μ—­...
}
// ArithmeticException μ˜ˆμ™Έν΄λž˜μŠ€ν˜• μ°Έμ‘°λ³€μˆ˜κ°€ ArithmeticExceptionν˜• μ˜ˆμ™Έ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°
catch(ArithmeticException e) {  
	...처리 μ˜μ—­...
}
// InputMismatchException μ˜ˆμ™Έν΄λž˜μŠ€ν˜• μ°Έμ‘°λ³€μˆ˜κ°€ InputMismatchExceptionν˜• μ˜ˆμ™Έ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°
catch(InputMismatchException e) {  
	...처리 μ˜μ—­...
}




πŸ”Ž κ΄€λ ¨ 예제

import java.util.Scanner;

public class ExceptionCase2 {
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);
		
		try {
			System.out.print("a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: ");
			int a = kb.nextInt();
			System.out.print("a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: ");
			int b = kb.nextInt();
			System.out.printf("%d/%d = %d /n", a, b, a/b);  // μ˜ˆμ™Έ λ°œμƒ 지점
		}
		catch(ArithmeticException e) {
			System.out.println(e.getMessage());  // μ˜ˆμ™Έμ˜ 원인을 λ‹΄κ³  μžˆλŠ” λ¬Έμžμ—΄μ„ λ°˜ν™˜
		}
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!");
	}
}


// μ‹€ν–‰ κ²°κ³Ό
a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: 5
a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: 0
/ by zero
ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!

  • λΆ„λͺ¨κ°€ 0인 μƒνƒœμ—μ„œ λ‚˜λˆ—μ…ˆμ„ μ§„ν–‰ν•˜λŠ” μˆœκ°„ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.
  • μ˜ˆμ™Έκ°€ λ°œμƒν•œ μˆœκ°„ 가상머신은 ArithmeticException μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œλ‹€.
  • tryμ˜μ—­μ— μ΄μ–΄μ„œ λ“±μž₯ν•˜λŠ” catchμ˜μ—­μ—μ„œ μƒμ„±ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό 인자둜 받을 수 μžˆλŠ” μ§€ ν™•μΈν•˜κ³ , λ°›μ„μˆ˜ 있으면 catchμ˜μ—­μœΌλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό μ „λ‹¬ν•œλ‹€.
    ➑ 전달 κ°€λŠ₯ μ—¬λΆ€λŠ” catch μ˜μ—­μ˜ λ§€κ°œλ³€μˆ˜ 선언을 톡해 κ²°μ •
  • catch μ˜μ—­μœΌλ‘œ μ˜ˆμ™Έ μΈμŠ€ν„΄μŠ€κ°€ μ „λ‹¬λ˜λ©΄, 가상머신은 μ˜ˆμ™Έκ°€ 처리된 κ²ƒμœΌλ‘œ νŒλ‹¨ν•΄ try ~ catch문의 λ‹€μŒ λ¬Έμž₯을 μ΄μ–΄μ„œ μ‹€ν–‰ν•œλ‹€.




μ˜ˆμ™Έ λ°œμƒ μ΄ν›„μ˜ μ‹€ν–‰ 흐름

try {
	1. ...
	2. μ˜ˆμ™Έ λ°œμƒ 지점
	3. ...
}
catch(Exception e) {
	...
}
4. μ˜ˆμ™Έ 처리 이후 μ‹€ν–‰ μ‹œμ 
  • 가상머신은 μ˜ˆμ™Έμƒν™©μ„ λ§Œλ‚˜λ©΄ 싀행을 잠깐 λ©ˆμΆ”κ³  μ˜ˆμ™Έμ²˜λ¦¬ λ©”μ»€λ‹ˆμ¦˜μ„ λ™μž‘μ‹œν‚¨ λ’€ λ‹€μ‹œ 싀행을 μ΄μ–΄λ‚˜κ°€κ²Œ λœλ‹€.
  • 2의 μœ„μΉ˜μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ 경우, catch μ˜μ—­μ—μ„œ ν•΄λ‹Ή μ˜ˆμ™Έμ— λŒ€ν•œ μ²˜λ¦¬κ°€ 이뀄진 λ‹€μŒ 3의 μœ„μΉ˜μ—μ„œ 싀행을 μ΄μ–΄κ°€λŠ” 것이 μ•„λ‹ˆλΌ 4의 μœ„μΉ˜μ—μ„œ 싀행이 이어진닀.
  • try μ˜μ—­ μ•ˆμ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ μ˜ˆμ™Έμ²˜λ¦¬ 이후에 κ·Έ μ˜ˆμ™Έκ°€ λ°œμƒν•œ 지점 이후뢀터 λ‚˜λ¨Έμ§€λ₯Ό μ΄μ–΄μ„œ μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹Œ try ~ catch문을 ν†΅μ§Έλ‘œ κ±΄λ„ˆλ›°κ³  μ‹€ν–‰ ν•˜κ²Œ λœλ‹€.

  • λ”°λΌμ„œ tryλŠ” μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆλŠ” μ˜μ—­μ„ λ¬ΆκΈ° μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©λœλ‹€.




λ‘˜ μ΄μƒμ˜ μ˜ˆμ™Έ 처리λ₯Ό μœ„ν•œ ꡬ성

  • try μ˜μ—­μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ 경우 μœ„μ— μžˆλŠ” catchλΆ€ν„° μ•„λž˜ μžˆλŠ” catch둜 λ„˜μ–΄κ°„λ‹€.
import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionCase4 {
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);
		
		try {
			System.out.print("a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: ");
			int a = kb.nextInt();   // μž…λ ₯ 였λ₯˜ λ°œμƒ κ°€λŠ₯
			System.out.print("a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: ");
			int b = kb.nextInt();   // μž…λ ₯ 였λ₯˜ λ°œμƒ κ°€λŠ₯
			System.out.printf("%d/%d = %d \n", a, b, a/b);
		}
		catch(ArithmeticException e) {
			System.out.println(e.getMessage());
		}
		catch(InputMismatchException e) {
			System.out.println(e.getMessage());
		}
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!");
	}
}


// μ‹€ν–‰ κ²°κ³Ό 
// (λΆ„λͺ¨κ°€ 0으둜 μž…λ ₯될 경우)
a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: 5
a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: 0
/ by zero
ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!

// (μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžκ°€ μž…λ ₯될 경우)
a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: e
null
ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!



  • ν•˜λ‚˜μ˜ catch ꡬ문 μ•ˆμ—μ„œ λ‘˜ μ΄μƒμ˜ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.
import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionCase5 {
	public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
		
		try {
			System.out.print("a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: ");
			int a = kb.nextInt();   // μž…λ ₯ 였λ₯˜ λ°œμƒ κ°€λŠ₯
			System.out.print("a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: ");
			int b = kb.nextInt();   // μž…λ ₯ 였λ₯˜ λ°œμƒ κ°€λŠ₯
			System.out.printf("%d/%d = %d \n", a, b, a/b);
		}
		catch(ArithmeticException | InputMismatchException e) {
			System.out.println(e.getMessage());
		}
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!");
	}
}


// μ‹€ν–‰ κ²°κ³Ό 
// (λΆ„λͺ¨κ°€ 0으둜 μž…λ ₯될 경우)
a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: 5
a/b...b의 값을 μž…λ ₯ν•˜μ„Έμš”: 0
/ by zero
ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!

// (μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžκ°€ μž…λ ₯될 경우)
a/b...a의 값을 μž…λ ₯ν•˜μ„Έμš”: e
null
ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!









Throwable 클래슀


  • java.lang.Throwable 이 λͺ¨λ“  μ˜ˆμ™Έ 클래슀의 μ΅œμƒμœ„ ν΄λž˜μŠ€μ΄λ‹€.
    ➑ λ”°λΌμ„œ λͺ¨λ“  μ˜ˆμ™Έ ν΄λž˜μŠ€λŠ” Throwable 클래슀λ₯Ό μƒμ†ν•œλ‹€.
  • Throwable 클래슀의 λ©”μ†Œλ“œ μ’…λ₯˜
    • public String getMessage()
      ➑ μ˜ˆμ™Έμ˜ 원인을 λ‹΄κ³  μžˆλŠ” λ¬Έμžμ—΄μ„ λ°˜ν™˜
    • public void printStackTrace()
      ➑ μ˜ˆμ™Έκ°€ λ°œμƒν•œ μœ„μΉ˜μ™€ 호좜된 λ©”μ†Œλ“œμ˜ 정보λ₯Ό 좜λ ₯









μ˜ˆμ™Έμ˜ μ „λ‹¬μ²˜λ¦¬μ˜ μ±…μž„ μ „κ°€


  • μ˜ˆμ™Έ λ°œμƒ μ§€μ μ—μ„œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œ μ˜μ—­μœΌλ‘œ μ˜ˆμ™Έκ°€ μ „λ‹¬λœλ‹€.



πŸ”Ž κ΄€λ ¨ 예제 (μ˜ˆμ™Έμ²˜λ¦¬ μ „)

class ExceptionMessage {
	public static void m1(int n) {
		m2(n,0);  // m2 λ©”μ†Œλ“œλ₯Ό 호좜
	}
	
	public static void m2(int n1, int n2) {
		int r = n1/n2;  // μ˜ˆμ™Έ λ°œμƒ 지점
	}
	
	public static void main(String[] args) {
		m1(3);
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!");
	}
}


// μ‹€ν–‰ κ²°κ³Ό
Exception in thread "main" java.lang.ArithmeticException: / by zero
	    // (0으둜 λ‚˜λˆ—μ…ˆ 연산을 ν•˜μ—¬ ArithmeticExceptionκ°€ λ°œμƒν–ˆλ‹€.)
	at ExceptionMessage.m2(ExceptionMessage.java:16)
	    // (ExceptionMessage 클래슀의 m2μ—μ„œ μ˜ˆμ™Έκ°€ μ‹œμž‘λ˜μ—ˆκ³ ) 
	at ExceptionMessage.m1(ExceptionMessage.java:12)
	    // (ExceptionMessage 클래슀의 m1으둜 μ˜ˆμ™Έκ°€ λ„˜μ–΄κ°”μœΌλ©°) 
	at ExceptionMessage.main(ExceptionMessage.java:20)
	    // (ExceptionMessage 클래슀의 main으둜 μ˜ˆμ™Έκ°€ λ„˜μ–΄κ°”λ‹€.)

  • λ©”μ†Œλ“œ 호좜 흐름 : main ➑ m1 ➑m2

  • m2μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ§€λ§Œ, m2μ—μ„œ ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠμŒ
    ➑ 가상머신은 m2λ₯Ό ν˜ΈμΆœν•œ m1μ—κ²Œ μ˜ˆμ™Έμ²˜λ¦¬μ˜ μ±…μž„μ„ λ„˜κΈ΄λ‹€.

  • m1μ—μ„œλ„ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠμŒ
    ➑ m1을 ν˜ΈμΆœν•œ mainμ—κ²Œ μ˜ˆμ™Έμ²˜λ¦¬μ˜ μ±…μž„μ„ λ„˜κΈ΄λ‹€.

  • mainμ—μ„œλ„ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠμŒ
    ➑ 가상머신이 λŒ€μ‹  μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•΄ μ˜ˆμ™Έ κ΄€λ ¨ λ©”μ‹œμ§€μ˜ 좜λ ₯κ³Ό ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œμ‹œν‚¨λ‹€.




πŸ”Ž κ΄€λ ¨ 예제 (μ˜ˆμ™Έμ²˜λ¦¬ ν›„)

public class ExceptionMessage {
	public static void m1(int n) {
		m2(n,0);  // 이 μ§€μ μœΌλ‘œ m2λ‘œλΆ€ν„° μ˜ˆμ™Έκ°€ λ„˜μ–΄μ˜¨λ‹€.
	}
	
	public static void m2(int n1, int n2) {
		int r = n1/n2;  // 이 μ§€μ μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.
	}
	
	public static void main(String[] args) {
		try {
			m1(3);  // 이 μ§€μ μ—μ„œ m1으둜 λΆ€ν„° μ˜ˆμ™Έκ°€ λ„˜μ–΄μ˜¨λ‹€.
		}
		catch(Throwable e) {
			e.printStackTrace();
		}
		System.out.println("ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!");
	}
}


// μ‹€ν–‰ κ²°κ³Ό
java.lang.ArithmeticException: / by zero
	at ExceptionMessage.m2(ExceptionMessage.java:11)
	at ExceptionMessage.m1(ExceptionMessage.java:7)
	at ExceptionMessage.main(ExceptionMessage.java:16)
ν”„λ‘œκ·Έλž¨ μ’…λ£Œ!

  • m2μ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό main λ©”μ†Œλ“œμ—μ„œ μ²˜λ¦¬ν•¨

  • μ‹€μ œλ‘œ λ„˜μ–΄μ˜€λŠ” μ˜ˆμ™Έμ˜ μΈμŠ€ν„΄μŠ€ νƒ€μž…μ€ Throwable이 μ•„λ‹ˆμ§€λ§Œ, λͺ¨λ“  μ˜ˆμ™Έ ν΄λž˜μŠ€λŠ” Throwableλ₯Ό μƒμ†ν•˜κΈ° λ•Œλ¬Έμ— catch μ˜μ—­μ—μ„œ λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ•„μ˜¬ 수 μžˆλ‹€.
    ( 쒋은 μ˜ˆμ™Έμ²˜λ¦¬ 방식은 μ•„λ‹˜! )









μ˜ˆμ™Έ 상황을 μ•Œλ¦¬κΈ° μœ„ν•΄ μ •μ˜λœ 클래슀 μ’…λ₯˜


πŸ”Ž ArrayIndexOutOfBoundsException

  • λ°°μ—΄ 접근에 잘λͺ»λœ 인덱슀 값을 μ‚¬μš©ν•˜λŠ” 였λ₯˜μƒν™©μ„ μ˜λ―Έν•˜λŠ” μ˜ˆμ™Έ 클래슀
class ExceptionArrayIndexOutOfBounds {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3 };
		for (int i = 0; i < 4; i++)
			System.out.println(arr[i]); // 인덱슀 κ°’ 3은 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΄
	}
}


// μ‹€ν–‰ κ²°κ³Ό
1
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
	at ExceptionArrayIndexOutOfBounds.main(ExceptionArrayIndexOutOfBounds.java:11)




πŸ”Ž ClassCastException

  • ν—ˆμš©ν•  수 μ—†λŠ” ν˜• λ³€ν™˜μ„ κ°•μ œλ‘œ μ§„ν–‰ν•˜λŠ” 경우 λ°œμƒν•˜λŠ” 였λ₯˜μƒν™©μ„ μ˜λ―Έν•˜λŠ” μ˜ˆμ™Έ 클래슀
class Board { }
class ABoard extends Board { }

class ClassCastException {
	public static void main(String[] args) {
		Board abd1 = new ABoard();
		ABoard abd2 = (ABoard)abd1;  // λͺ…μ‹œμ  ν˜•λ³€ν™˜ ok!
		
		System.out.println(".. intermediate location ..");
		Board bd1 = new Board();
		ABoard bd2 = (ABoard)bd1;    // μ˜ˆμ™Έ λ°œμƒ
	}
}


// μ‹€ν–‰ κ²°κ³Ό
.. intermediate location ..
Exception in thread "main" java.lang.ClassCastException: Board cannot be cast to ABoard (Board and ABoard are in unnamed module of loader 'app')
	at ClassCastException.main(ClassCastException.java:13)




πŸ”Ž NullPointerException

  • null이 μ €μž₯된 μ°Έμ‘°λ³€μˆ˜λ₯Ό λŒ€μƒμœΌλ‘œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ°œμƒν•˜λŠ” 였λ₯˜μƒν™©μ„ μ˜λ―Έν•˜λŠ” μ˜ˆμ™Έ 클래슀
class NullPointerException {
	public static void main(String[] args) {
		String str = null;
		System.out.println(str);  // null 좜λ ₯
		int len = str.length();   // μ˜ˆμ™Έ λ°œμƒ
	}
}


// μ‹€ν–‰ κ²°κ³Ό
null
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
	at NullPointerException.main(NullPointerException.java:11)









μ°Έκ³ 
μ—΄ν˜ˆ μžλ°” ch18-1 (μžλ°” μ˜ˆμ™Έμ²˜λ¦¬μ˜ κΈ°λ³Έ)

0개의 λŒ“κΈ€