1~3. ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜


์˜ค๋ฅ˜์˜ ์ข…๋ฅ˜

  • ์ปดํŒŒ์ผ ์—๋Ÿฌ : ์ปดํŒŒ์ผ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ
  • ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ : ์‹คํ–‰ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ
    • ์—๋Ÿฌ : ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์— ์˜ํ•ด์„œ ์ˆ˜์Šต๋  ์ˆ˜ ์—†๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜
      • e.g. OutOfMemoryError
    • ์˜ˆ์™ธ : ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์— ์˜ํ•ด์„œ ์ˆ˜์Šต๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค์†Œ ๋ฏธ์•ฝํ•œ ์˜ค๋ฅ˜
      • Exception ํด๋ž˜์Šค๋“ค (์™ธ์  ์š”์ธ)
      • Runtime Exception ํด๋ž˜์Šค๋“ค (๋‚ด์  ์š”์ธ)
  • ๋…ผ๋ฆฌ์  ์—๋Ÿฌ : ์ž‘์„ฑ ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘

์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• 

  • ๊ตฌ๋ฌธ ์ฒดํฌ
  • ๋ฒˆ์—ญ
  • ์ตœ์ ํ™”
  • ์ƒ๋žต๋œ ์ฝ”๋“œ ์ถ”๊ฐ€

์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜ ์ •์˜์™€ ๋ชฉ์ 

  • ์ •์˜ : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ์˜ ๋ฐœ์ƒ์— ๋Œ€๋น„ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
  • ๋ชฉ์  : ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ ์ข…๋ฃŒ๋ฅผ ๋ง‰๊ณ , ์ •์ƒ์ ์ธ ์‹คํ–‰์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ

์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๊ณ„์ธต ๊ตฌ์กฐ

Exception๊ณผ RuntimeException

  • Exception ํด๋ž˜์Šค๋“ค : ์™ธ์ ์ธ ์š”์ธ์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ (์‚ฌ์šฉ์ž์˜ ์‹ค์ˆ˜)
  • RuntimeException ํด๋ž˜์Šค๋“ค : ๋‚ด์ ์ธ ์š”์ธ์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์‹ค์ˆ˜)

4~6. ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•˜๊ธฐ


์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•˜๊ธฐ. try-catch๋ฌธ

try {
	// ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ตฌ๋ฌธ
} catch (Exception1 e1) {
	// Exception1์„ ์ฒ˜๋ฆฌํ•  ๊ตฌ๋ฌธ
} catch (Exception2 e2) {
	// Exception2๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ตฌ๋ฌธ
} catch (ExceptionN eN) {
	// ExceptionN์„ ์ฒ˜๋ฆฌํ•  ๊ตฌ๋ฌธ
}

์˜ˆ์™ธ์˜ ๋ฐœ์ƒ๊ณผ catch ๋ธ”๋Ÿญ

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  catch ๋ธ”๋Ÿญ์„ ์ฐพ์•„ ๋‚ด๋ ค๊ฐ
  • ์ผ์น˜ํ•˜๋Š” catch ๋ธ”๋Ÿญ์ด ์—†์œผ๋ฉด, ์˜ˆ์™ธ๋Š” ์ฒ˜๋ฆฌ ์•ˆ๋จ
  • Exception์ด ์„ ์–ธ๋œ catch ๋ธ”๋Ÿญ์€ ๋ชจ๋“  ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (๋งˆ์ง€๋ง‰ catch ๋ธ”๋Ÿญ)

7~8. printStackTrace(), ๋ฉ€ํ‹ฐ catch


printStackTrace()์™€ getMessage()

  • printStackTrace() - ์˜ˆ์™ธ๋ฐœ์ƒ ๋‹น์‹œ์˜ ํ˜ธ์ถœ์Šคํƒ(Call Stack)์— ์žˆ์—ˆ๋˜ ๋ฉ”์„œ๋“œ์˜ ์ •๋ณด์™€ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅ
  • getMessage() - ๋ฐœ์ƒํ•œ ์˜ˆ์™ธํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜
try {
	...
	System.out.println(0/0); // ArithmeticException ์˜ˆ์™ธ ๊ฐ์ฒด ์ƒ์„ฑ
	...
} catch (ArithmeticException ae) {
	ae.printStackTrace();
	System.out.println(ae.getMessage());
} catch (Exception e) {
	...
}

๋ฉ€ํ‹ฐ catch ๋ธ”๋Ÿญ

  • ๋‚ด์šฉ์ด ๊ฐ™์€ catch ๋ธ”๋Ÿญ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ ๊ฒƒ (JDK 1.7๋ถ€ํ„ฐ)
try {
	...
} catch (ExceptionA | ExceptionB e) {
	e.printStackTrace();
	e.methodA(); // ์—๋Ÿฌ. ExceptionA์™€ ExceptionB์˜ ๊ณตํ†ต๋ฉค๋ฒ„๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
} catch (ParentException | ChildException pe) { // ์—๋Ÿฌ. ๋ถ€๋ชจ๋งŒ ์‚ฌ์šฉํ•ด๋„ ๋จ
}

9~10. ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ


์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

  1. ์—ฐ์‚ฐ์ž new๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐœ์ƒ์‹œํ‚ค๋ ค๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ๋‹ค์Œ
  2. ํ‚ค์›Œ๋“œ throw๋ฅผ ์ด์šฉํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
public class Ex8_6 {
	public static void main(String[] args) {
		try {
			throw new Exception("๊ณ ์˜๋กœ ๋ฐœ์ƒ์‹œ์ผฐ์Œ.");
		} catch (Exception e) {
			System.out.println("์—๋Ÿฌ ๋ฉ”์‹œ์ง€ : " + e.getMessage());
			e.printStackTrace();
		}
		System.out.println("์ •์ƒ ์ข…๋ฃŒ");
	}
}

checked ์˜ˆ์™ธ, unchecked ์˜ˆ์™ธ

  • checked ์˜ˆ์™ธ : ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌ (์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ•„์ˆ˜)
    • Exception๊ณผ ์ž์†๋“ค (์™ธ์  ์š”์ธ)
  • unchecked ์˜ˆ์™ธ : ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌ ์•ˆํ•จ (์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์„ ํƒ)
    • RuntimeException๊ณผ ์ž์†๋“ค (๋‚ด์  ์š”์ธ)

11~14. ์˜ˆ์™ธ ์„ ์–ธํ•˜๊ธฐ, finally ๋ธ”๋Ÿญ


๋ฉ”์„œ๋“œ์— ์˜ˆ์™ธ ์„ ์–ธํ•˜๊ธฐ

  • ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• : try-catch๋ฌธ, ์˜ˆ์™ธ ์„ ์–ธํ•˜๊ธฐ
  • ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์— ์•Œ๋ฆฌ๋Š” ๊ฒƒ
  • checked ์˜ˆ์™ธ (ํ•„์ˆ˜ ์ฒ˜๋ฆฌ ์˜ˆ์™ธ) ๋งŒ throws ๋กœ ์•Œ๋ฆผ
void method() throws Exception1, Exception2, ... ExceptionN {
	// ๋ฉ”์„œ๋“œ ๋‚ด์šฉ
}
// method()์—์„œ Exception๊ณผ ๊ทธ ์ž์† ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
void method() throws Exception {
	// ๋ฉ”์„œ๋“œ ๋‚ด์šฉ
}
static void startInstall() throws SpaceException, MemoryException {
	if (!enoughSpace()) {
		throw new SpaceException("์„ค์น˜ํ•  ๊ณต๊ฐ„ ๋ถ€์กฑ");
	}
	if (!enoughMemory()) {
		throw new MemoryException("๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ");
	}
}

finally ๋ธ”๋Ÿญ

  • ์˜ˆ์™ธ ๋ฐœ์ƒ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„ ์—†์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ
try {
	// ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ตฌ๋ฌธ
} catch (Exception1 e1) {
	// ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ
} finally {
	// ์˜ˆ์™ธ ๋ฐœ์ƒ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„ ์—†์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ตฌ๋ฌธ
	// try ์™€ catch ๋ฌธ์— ๋ชจ๋‘ ํ•ด๋‹นํ•˜๋Š” ๊ตฌ๋ฌธ
}

15~17. ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ


์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๋งŒ๋“ค๊ธฐ

  • ์ง์ ‘ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜
  • ์กฐ์ƒ์€ Exception๊ณผ RuntimeException ์ค‘์— ์„ ํƒ
class MyException extends Exception {
	MyException(String msg) {
		super(msg); // ์กฐ์ƒ์ธ Exception ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
	}
}

์˜ˆ์™ธ ๋˜๋˜์ง€๊ธฐ

  • ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„์— ๋‹ค์‹œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ
  • ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ์™€ ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ ์–‘์ชฝ ๋ชจ๋‘์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ
public class Ex8_12 {
	public static void main(String[] args) {
		try {
			method1();
		} catch (Exception e) {
			System.out.println("main ์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ");
		}
	}
	static void method1() throws Exception {
		try {
			throw new Exception();
		} catch (Exception e) {
			System.out.println("method1 ์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ");
			throw e;
		}
	}
}

18. ์—ฐ๊ฒฐ๋œ ์˜ˆ์™ธ


์—ฐ๊ฒฐ๋œ ์˜ˆ์™ธ

  • ํ•œ ์˜ˆ์™ธ๊ฐ€ ๋‹ค๋ฅธ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
  • ์˜ˆ์™ธA๊ฐ€ ์˜ˆ์™ธB๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด, A๋Š” B์˜ ์›์ธ ์˜ˆ์™ธ (cause exception)
Throwable initCause(Throwable cause) ์ง€์ •ํ•œ ์˜ˆ์™ธ๋ฅผ ์›์ธ ์˜ˆ์™ธ๋กœ ๋“ฑ๋ก
Throwable getCause()                 ์›์ธ ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜
void install() throws InstallException {
	try {
		startInstall(); // SpaceException ๋ฐœ์ƒ
		copyFiles();
	} catch (SpaceException e) {
		InstallException ie = new InstallException("์„ค์น˜์ค‘ ์˜ˆ์™ธ ๋ฐœ์ƒ"); // ์˜ˆ์™ธ ์ƒ์„ฑ
		ie.initCause(e); // InstallException์˜ ์›์ธ ์˜ˆ์™ธ๋ฅผ SpaceException์œผ๋กœ ์ง€์ •
		throw ie;        // InstallException์„ ๋ฐœ์ƒ์‹œํ‚ด
	} catch (MemoryException me) {
	}
}

์ด์œ 

  1. ์—ฌ๋Ÿฌ ์˜ˆ์™ธ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด
try {
	install(); // install ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ Space, MemoryException์„ ์ฒ˜๋ฆฌ
} catch(InstallException e) { // InstallException์˜ ์›์ธ ์˜ˆ์™ธ๋ฅผ
	e.printStackTrace();        // Space, MemoryException์œผ๋กœ ์ง€์ •
}
  1. checked ์˜ˆ์™ธ๋ฅผ unchecked ์˜ˆ์™ธ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค ํ•  ๋•Œ
static void startInstall() throws SpaceException {
	if (!enoughSpace()) {
		throw new SpaceException("๊ณต๊ฐ„ ๋ถ€์กฑ");
	}
	// RuntimeException์˜ ์›์ธ ์˜ˆ์™ธ๋ฅผ MemoryException์œผ๋กœ ์ง€์ •
	// ํ•„์ˆ˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์„ ํƒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ ๋ณ€๊ฒฝ
	if (!enoughMemory()) {
		throw new RuntimeException(new MemoryException("๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ"));
	}
}