2023. 10. 23. 00:13ㆍJava언어 공부
예외 처리의 목적
- 오류를 발견하기 위한 목적
- 비정상적인 경우가 발생할 때 프로그램이 죽지 않고 이어가기 위해서.
예외란?
정상적인 경우에는 일어나지 않지만 발생할 수 있는 문제를 말한다.
개발 과정 : 예외 처리를 통해 프로그램 오류 발견 및 수정
개발 이후 : 예외가 발생하여도 프로그램이 계속 수행될 수 있도록 한다.
프로그램이 자체적으로 극복할 수 없는 예외에 대해서는 다음을 보장해 주어야 한다.
- 사용자에게 오류 사실을 알린다.
- 더 이상 수행이 가능하지 않으면 현재 작업을 저장한다.
- 우아하게 종료할 수 있도록 해준다. (프로그램이 죽는다고 시스템이 죽으면 안됨)
여러가지 오류들
사용자 입력 오류 -> 인터페이스를 잘 만들면 됨
장치 오류, 물리적 제한 -> 극복할 수 없음. 사용자에게 알려야 함
실행시간 논리 오류 : 프로그램 작성 (예외 처리 해야 함)
예외 처리 방법
try{
//실행할 함수들
}
catch()
{
실행한 함수 1에 대한 예외
}
catch()
{
실행한 함수 2에 대한 예외
}
...
1. 예외가 발생하면 자동으로 그것을 처리하는 곳으로 이동한다. (JVM까지 안가면 됨)
2. 예외가 발생하면 그 이후의 코드는 실행하지 않음
=> 프로그램의 주 로직에서 오류 처리 부분을 제외할 수 있다.
오류 처리 위치를 유연하게 결정할 수 있다.
함수의 반환 타입에 영향을 받지 않고 사용할 수 있다.
자바에서는?
- 어떤 메소드가 어떤 예외를 발생할 수 있는지 공표할 수 있다.
- 일부 예외는 처리르 강제화하고 있다.
예외 예시 알아보기
이러한 코드가 있다고 가정하자.
실행시키면 이러한 코드가 발생한다.
- 발생한 예외 : java.lang.ArithmeticException (산술 오류)
- 예외 세부 분류 : / by zero
- 발생된 위치 : main 메소드의 10번째 줄번호
public static void main(String[] args)
{
try
{
int x = 10;
int y = 0;
int z = 0;
z = x / y;
System.out.println("End of try clause");
}
catch(ArithmeticException e)
{
System.out.println("Exception caught: "+e.getMessage());
}
System.out.println("End of program");
}
이러한 코드를 짜보자.
실행하면
아래와 같이 뜬다. (try 안에 오류가 뜬 위치부터는 코드를 실행하지 않는다)
throw
내가 직접 예외를 발생하고 싶은 경우 사용가능하다.
에외와 관련된 정보를 캡슐화하고 있는 객체를 생성하고,
알려서 처리할 수 있는 곳까지 이동해서 실행한다.
throw new 오류객체이름("오류 내용")
!! JVM까지 해당 예외 객체가 전달되면 JVM은 이 문자열을 콘솔에 출력하여 준다. !!
catch
try에서 실행한 함수들에서 발생한 오류들을 catch에서 잡아서 처리할 수 있다.
발생한 예외를 잡을 수 있는 catch절이 없으면 함수는 종료되고, 예외는 다시 상위 함수로 전달된다.
catch( 오류 이름 | 오류 이름 e)
{
//오류 처리 (ex. e.getmessage)
}
순서가 중요하다. 상속 관계에 있을 때 후손 클래스의 catch가 밑에 있고,
부모 클래스의 catch가 위에 있다고 가정하면 후손클래스의 예외는 부모 클래스의 catch에서 처리된다.
finally
try가 실행되고 catch가 실행되든 안되든 무조건 실행하는 함수이다.
try-with-resource
파일 처리와 관련이 있음
예전에는 파일을 닫기 위해서 finally를 썼었는데,
try(
FileReader reader = new FileReader("input.txt");
){
//실행할 코드
}
지금은 이렇게만 써줘도, 알아서 finally를 사용하지 않아도 파일을 닫아준다.
예외 공표
공표해야 하는 예외가 여러개면 ,로 구분해서 나열한다.
void f() throws IOException, ListFullException
{
//
}
단 상속관계에 있다면 부모 예외 경우만 공표하면 된다.
'Java언어 공부' 카테고리의 다른 글
[Java] 16. 배열 (1) (0) | 2023.10.24 |
---|---|
[Java] 15. 조건문과 반복문 (2) (1) | 2023.10.24 |
[Java-FX] 4. Java FX 레이아웃 및 사건 기반 프로그래밍 (2) (2) | 2023.10.22 |
[Java] 14. 조건문과 반복문 (1) (0) | 2023.10.09 |
[Java-FX] 3. Java FX 레이아웃 및 사건 기반 프로그래밍 (1) (0) | 2023.10.08 |