try catch문 구조

try {
	// 예외 발생 가능성이 있는 문장
}
catch(e: Exception1) {
	// 예외가 잡히게 되면 처리하거나 로깅을 함
}
catch(e: Exception2) {
	// 위와 똑같은 플로우
}
finally {
	// 위의 코드가 어떻게 됐든 무조건 실행되어야할 finally 블록 코드
}

try catch 흐름

예외가 try 블럭 안에서 발생한 경우

  1. 예외와 일치하는 catch 문이 있는지 확인
  2. 일치하는 catch 문이 있다면 catch 블럭 내의 문장을 수행하고 빠져나가서 다음 문장 수행
  3. 일치하는 catch 문이 없다면 예외는 처리되지 못하고 에러 발생

예외가 try 블럭 안에서 발생하지 않은 경우

  1. catch 블럭을 거치지 않고 전체 try-catch 문을 빠져나가서 다음 문장 수행

예외가 try 블럭 밖에서 발생한 경우

  1. 예외는 처리되지 못한 채 에러 발생

try catch 주의점

try{
	//.. 중략 ..//
} catch (Exception e){
	//컴파일 오류 발생
} catch (IOException e){

}

// Exception 클래스는 모든 예외의 부모이기 때문에 Exception 을 IOException 보다
// 위에서 처리할 수 없다
// WHY ?? IOException 의 catch 블록은 도달할 수 없다

위처럼 Exception 클래스는 모든 Exception의 부모이기 때문에

다른 예외가 나더라도 밑의 catch 블록까지 도달하지 못하고 (Exception e) 부분에서 잡히게 된다.