23. 예외처리

Lee kyu min·2024년 2월 5일

Java study

목록 보기
22/41

에러(error)

  • 프로그램 실행 중 오작동하거나 비정상적으로 종료되는 원인
    메모리부족, 스택오버플로우가 복구할 수 없는 심각한 오류이다.

(1). 컴파일 에러

  • 컴파일 시 발생하는 에러

(2). 런타임 에러

  • 실행 시 발생하는 에러

(3). 논리적 에러

  • 실행은 되지만 의도와 다르게 동작

예외(exception)

  • 발생하더라도 수습될 수 있는 비교적 덜 심각한 오류
  • 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 놓음으로써 프로그램의 비정상적인 종료를 막을 수 있다.

예외처리

  • 프로그램 실행시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드 작성

1. try -catch문

  • 예외 발생 시 예외 종류와 일치하는 catch 블록이 실행(예외 발생 안하면 try 블록 실행)
try {
에러 발생 가능성이 있는 코드  //에러가 발생하지 않으면 해당 코드 작동
} catch(Exception1 e1) {
Exception1이 발생했을 경우, 작동할 코드
} catch(Exception1 e2) {
Exception2이 발생했을 경우, 작동할 코드
} ....
  • catch 는 위에서부터 일치하는 catch블럭을 찾을 시 다음 블럭은 검사하지 않는다.

1). try 블럭 내에서 예외 발생 시

(1). 발생한 예외와 일치하는 catch 블록이 있는 경우
예외문 이전 try 블럭 코드까진 실행,
예외 발생 부분 이후 해당 예외에 해당하는 catch블럭 내 문장 수행
(예외 발생 위치 이후 try 블럭 문장은 수행안됨)
(2). 발생한 예외와 일치하는 catch 블록이 없는 경우
예외처리 불가능

2). catch블럭 내에서만 사용 가능한 메서드

  • getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지 출력
  • printStackTrace() : 예외 발생 당시 호출 스택에 있던 메서드 정보와 예외 메세지 출력

2. finally 블럭

  • 예외 발생여부 관계 없이 실행되어야 할 코드를 포함시킬 목적으로 사용
    try - catch 구문 맨 마지막에 선택적으로 덧분여 사용
try {
에러 발생 가능성이 있는 코드  //에러가 발생하지 않으면 해당 코드 작동
} catch(Exception1 e1) {
Exception1이 발생했을 경우, 작동할 코드
} finally {
예외가 발생하든 하지 않든 무조건 처리하는 코드
}

3. 강제로 예외 발생시키기

  • throw 키워드를 통해 강제로 예외를 발생할 수 있다.
Exception e = new Exception("에러 발생시 출력할 메세지");
throw e;

or

throw new Exception("에러 발생시 출력할 메세지")

4. 메서드 예외(예외 떠넘기기)

  • 메서드 선언부에 throws 키워드 입력
  • throws 다음 발생할 수 있는 예외를 적어준다
void method() throws Exception1, Exception2, ...ExceptionN {
메서드 내용
}
  • 이 예외 뿐 아니라 자손타입의 예외까지도 발생할 수 있음을 주의
  • 예외를 메서드 throws에 명시하는 것은 예외처리가 아니라, 이를 호출한 메서드에게 예외를 전달하여 예외처리를 맡기는 것이다. 따라서 이 메서드를 호출하는 곳에서 예외를 받아 처리해야한다.

5. Exception 클래스

  • 모든 예외 클래스는 Exception클래스의 자손이다.
  • catch 블럭 괄호()에 Exception클래스 타입 참조변수를 선언하면 어떤 종류의 예외가 발생하더라도 catch블럭에 의해 처리된다.

0개의 댓글