내일배움캠프 15일차 TIL - 예외처리(1)

iy·2024년 1월 4일

TIL

목록 보기
14/37

프로그램 오류

  • 컴파일 에러 : 컴파일 할 때 발생하는 에러

    컴파일러 하는 일
    1. 구문 체크
    2. 번역
    3. 최적화

  • 런타임 에러 : 실행 할 때 발생하는 에러(발생 시 프로그램 종료)

    런타임 에러
    - 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
    - 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

  • 논리적 에러 : 작성 의도와 다르게 동작(발생시 프로그램 종료X)

에러는 어쩔 수 없지만 예외는 미리 처리해보자

예외처리

  • 정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
  • 목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지하는 것
try {
	// 예외가 발생할 가능성이 있는 문장을 넣는다.
}catch (Exception1 e1) {
	// Exception1이 발생했을 경우 이를 처리하기 위한 문장을 찾는다.
}catch (Exception2 e2) {
	// Exception2이 발생했을 경우 이를 처리하기 위한 문장을 찾는다.
}
....
}catch (ExceptionN eN) {
	// ExceptionN이 발생했을 경우 이를 처리하기 위한 문장을 찾는다.
}

try-catch문에서의 흐름

  1. try블럭 내에서 예외가 발생할 경우
    1) 발생한 예외와 일치하는 catch블럭이 있는지 확인
    2) 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.

  2. try블럭 내에서 예외가 발생하지 않는 경우
    1) catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.

예외의 발생과 catch블럭

  • 예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감(위 -> 아래)
  • 일치하는 catch블럭이 없으면, 예외는 처리 안됨
  • 만약 일치하는 catch가 여러개여도 하나에서만 처리함
  • Exception이 선언된 catch블럭은 모든 예외 처리(마지막 catch블럭)
    - Exception : 모든 예외의 최고 조상

PrintStackTrace()와 getMessage()

  • printStackTrace() : 예외 발생 당시의 호출 스택에 있었던 메서드의 정보와 예외 메세지를 화면에 출력
  • getMessage() : 발생한 예외 클래스의 인스턴스에 저장된 메세지를 얻을 수 있다.
try {
	System.out.println(0/0); // 예외 발생!
}catch (ArithmeticException e1) {
	System.out.println(e1.getMessage());
....
}catch (Exception eN) {
	...
}

멀티 catch블럭

  • 내용이 같은 catch블럭을 하나로 합친 것
    - 내용 동일한 것을 합치면서 코드 중복을 줄여줌
try{...
} catch(ExceptionA e){
	e.printStackTrace();
} catch(ExceptionB e2){
	e2.printStackTrace(); // 위에 catch블럭 내용 동일!!
}
try{...
} catch(ExceptionA | ExceptionB e){
	e.printStackTrace();
}

❗주의

//경우1.
try{...
// } catch(ParentExceptionA | ChildException e){ //에러!
} catch(ParentExceptionA e){ // 부모자식 관계일 땐 부모만 작성해주면 됨!!
	e.printStackTrace();
}
//경우2.
```java
try{...
} catch(ExceptionA | ExceptionB e){
	//e.methodA(); // 에러 : ExceptionA에 선언된 methodA()는 호출 불가!
    // instanceof 사용해 형변환 후 불러오는 건 가능!
	e.printStackTrace();
}

👀
내배캠 강의를 듣는데 예외처리 부분을 공부하기 시작했다. 이전 프로젝트 때 예외처리 지식이 부족해서 아쉬웠던 경험이 있다. 이번엔 그때 느낀 아쉬움을 다시 느끼고 싶지 않기 때문에 이 부분을 집중적으로 자세하게 공부해야겠다.

0개의 댓글