반응형
1. 프로그램 오류
- 프로그램 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다.
- 이를 발생 시점에 따라 '컴파일에러( compile error )'와 '런타입에러( runtime error )'로 나눌 수 있는데 컴파일에러는 컴파일할 때 발생하는 에러이고 프로그램 실행 중에 발생하는 에러를 런타임에러라고 한다.
컴파일에러 컴파일 시에 발생하는 에러( 주로 문법 ) 런타입에러 실행 시에 발생하는 에러( 배열 범위 벗어남 ) 논리적에러 실행은 되지만 의도와 다르게 동작하는 것 - 자바에서는 실행 시( runtime ) 발생할 수 있는 프로그램의 오류를 에러( error )와 예외( exception ) 두 가지로 구분하였다.
- 에러가 발생하면 프로그램의 비정상적인 종료를 막을 길이 없지만, 예외는 발생하더라도 프로그래머가 이를 적절한 코드를 미리 작성해 놓음으로써 프로그램의 비정상적인 종료를 막을 수 있다.
에러( error ) 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외( exception ) 프로그램 코드에 의해서 수습될 수 있는 미약한 오류
2. 예외처리 try-catch 문
- 프로그램 실행 도중에 발생하는 에러는 어쩔 수 없지만, 예외는 프로그래머가 이에 대한 처리를 미리 해주어야 한다.
- 예외처리란 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이며 예외처리의 목적은 예외의 발생으로 인한 실행 중인 프로그램의 갑작스러운 비정상 종료를 막고 정상적인 실행상태를 유지할 수 있도록 하는 것이다.
try { // 예외가 발생할 수 있는 코드 } catch ( 예외클래스 참조변수 ) { // 예외가 발생했을 때 처리할 코드 } catch ....
- try 블록 내에서 예외가 발생한 경우
- 발생한 예외가 일치하는 catch 블록이 있는지 확인한다.
* 예외클래스 참조변수 --> Exception e( 이 클래스 안에는 많은 것들이 있다. )
* e.getMessage로 어떤 이유로 예외 되었는지 알 수 있다. - 일치하는 catch 블록을 찾게 되면 그 catch 블록 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그다음 문장을 수행한다.
- catch문을 찾지 못하면 예외는 처리하지 않는다.
- 발생한 예외가 일치하는 catch 블록이 있는지 확인한다.
- try 블록 내에서 예외가 발생하지 않은 경우
- catch 블록을 거치지 않고 try-catch문을 빠져나가서 수행을 계속한다.
- catch 블록을 거치지 않고 try-catch문을 빠져나가서 수행을 계속한다.
3. 예외의 발생과 catch 블록
- catch 블록은 괄호()와 블록{} 두 부분으로 나누어져 있는데 괄호 내에서 처리하고자 하는 예외가 같은 타입의 참조변수를 선언해야 한다.
- 예외가 발생하면 예외에 해당하는 클래스의 인스턴스가 만들어진다.
- 또한 예외가 발생했을 때 생성되는 예외 클래스의 인스턴스에는 발생한 예외의 대한 정보가 있으며 아래와 같다.
getMessage() 발생한 예외 클래스의 인스턴스에 저장된 메시지를 얻을 수 있다. printStackTrace() 예외 발생 당시에 호출스택에 있었던 메소드의 정보와 예외 메시지를 화면에 출력한다.
4. 예외 발생시키기
- 키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있으며 방법은 아래의 순서를 따르면 된다.
- 먼저 new를 이용해서 발생시키려는 예외 클래스의 객체( 인스턴스 )를 만든 다음
- throw를 이용해서 예외를 발생시킨다.
5. 메소드의 예외 선언하기
- 예외를 try-catch문을 사용하는 것 외에 예외를 메소드에 선언하는 방법이 있다.
- 메소드에 예외를 선언하려면 메소드의 선언부에 throws를 사용해서 메소드 내에서 발생할 수 있는 예외를 적어주면 된다.
- 만약, 예외가 여러 개일 경우 쉼표로 구분해서 여러 개를 적어준다.
- 예외가 발생했으면 자기의 예외를 호출한 곳에 예외를 던져 주는 것이다.
6. finally 블록
- finally 블록은 예외 발생 여부에 상관없이 실행되어야 할 코드를 포함시킬 목적으로 사용된다.
- try-catch-finally의 순서로 구성된다.
try { // 예외가 발생할 수 있는 코드 } catch ( 예외클래스 참조변수 ) { // 예외가 발생했을 때 처리할 코드 } finally { // 예외 발생 유무에 상관없이 실행 될 코드 }
반응형
'웹개발 > JAVA' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크( Collection Framework ) - ArrayList, LinkedList, Stack & Queue, Iterator (0) | 2022.02.03 |
---|---|
[JAVA] Object, String, Math, Wrapper 클래스 (0) | 2022.01.29 |
[JAVA] 내부클래스( inner class ), 익명클래스( anonymous class ) (0) | 2022.01.27 |
[JAVA] 인터페이스( interface ) (0) | 2022.01.26 |
[JAVA] 추상클래스( abstract class ) (0) | 2022.01.26 |