Java의 정석 예외처리

김민석·2026년 2월 26일
post-thumbnail

프로그램 오류의 종류

  • 컴파일 에러 : 컴파일 시 에러
  • 런타임 에러 : 실행 시 에러
  • 논리적 에러 : 실행은 되는데 의도와 다르게 동작

예외처리하기 - try-catch(직접 처리), 예외 선언(보고

프로그램 실행 시 발생할 수 있는 예외에 대한 코드 작성하는 것.
즉 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하기 위해서하는 것

catch(Exception e) - 모든 에외 처리(예외처리 최고 부모)

catch(Exception e)는 모든 예외를 처리한다.그 전에 다른 예외처리에 대한 catch문에 대한 예외를 처리한 후 나머지 예외처리를 이 catch문에서 처리함. Exception은 맨 마지막에 놓는게 좋음. 다른 예외처리가 Exception 다음에 오면 처리가 안됨(오류)

Exception 메서드 - printStackTrace(),getMessage()

printStackTrace는 예외가 발생한 호출 경로를 알 수 있다. 즉 어떤 메서드에서 어떤 메서드를 거쳐 어디서 예외가 발생했는지.
getMessage는 예외 객체에 저장된 예외 메세지를 알 수 있음

예외 발생시키기

throw로 예외를 고의로 발생시킬 수 있음.

  • new로 예외 클래스 객체를 생성
  • throw를 이용해 예외를 발생시킴

finally

try-catch 문에서 예외가 실행되든 안되든 무조건 실행되는 블럭
그 전에 try 문에서 return 이 있어도 finally가 실행되고 return됨

try {

} catch(Exception e ) {

} finally {

}

Exception과 RuntimeException

Exception은 필수처리 예외이며 사용자 실수
RuntimeException은 선택처리 예외이며 개발자 실수

예외 되던지기

메서드 내에서 발생한 예외를 catch 블록에서 처리한 후 throw를 통해 다시 호출부로 던지는 기법 한 메서드에서 발생할 수 있는 예외가 여럿인 경우, 몇 개는 try-catch문을 통해서 메서드 내에서 자체적으로 처리하고, 그 나머지는 선언부에 지정하여 호출한 메서드에서 처리하도록 함으로써, 양쪽에서 나눠서 처리되도록 할 수있다.

static void method1() throws Exception {
	try {
		throw new Exception();
	} catch (Exception e) {
		System.out.println("method1 Exception");
		throw e; // 다시 예외를 발생 시킨다.
	}
}

public static void main(String[] args) {
	try {
		method1();
	} catch (Exception e) {
		System.out.println("main Exception");
	}
}

// 결과
// method1 Exception
// main Exception

예외 되던지기 장점

  • 예외 처리의 분산 및 협업: 한 메서드에서 발생한 여러 예외 중, 현재 메서드에서 해결할 수 있는 것은 처리하고 나머지는 호출한 메서드에서 처리하게 함으로써 예외 처리 책임을 분담
  • 구체적 로깅 및 회복: catch 블록에서 상세한 로그를 남기거나 임시로 데이터를 정리한 후, 상위 컨텍스트에 예외 사실을 알려 적절한 사용자 안내나 복구 동작을 수행할 수 있음
  • 프로그램 안정성 유지: 예외를 단순히 무시하지 않고 처리 가능한 부분은 처리하고 불가능한 부분은 확실하게 전달하여 프로그램의 갑작스런 비정상 종료를 막습니다.
profile
나만의 기록장

0개의 댓글