티스토리 뷰

Chapter 9. 예외처리

 

▶ 학습 목표

: 예외처리가 무엇인지 알고 어떤 상황에 사용하는지 이해하고 적절히 사용할 수 있다.

 

 

 

9-1. 예외

: 프로그램 실행 중에 발생하는 오류 중 처리가 가능한 것

 

* 에러 : 개발자가 조치를 취할 수 없는 수준     ex) 메모리 부족, JVM 동작이상

* 컴파일 에러 : 컴파일 시 발생하는 에러     ex) 오타, 잘못된 자료형 등

* 런타임 에러 : 프로그램이 실행하는 도중에 발생하는 에러

* 로직 에러 : 실행은 되지만 의도와는 다르게 동작하는 에러

* 예외 : 다른 방식으로 처리 가능한 오류     ex) 입력 값 오류, 네트워크 문제

 

 

 

 

9-2. 예외처리

: 예외가 발생했을 때 적절하게 처리하는 것

예외 발생시 프로그램이 비정상적으로 종료되는 것을 막기 위해 사용한다.

 

 

 

9-3. try-catch/finally

 

- try-catch 문

: 예외가 발생했을 때 처리하기 위한 구문

예외 발생 시 적절한 처리를 하기 위해 사용한다.

 

try문에는 예외가 발생할 수 있는 감시할 문장을 넣는다.

catch문에는 예외가 발생할 경우 처리 방법을 작성한다.

 

try{
	//예외 발생할 가능성이 있는 문장들
}
catch(예외1){
	//예외 1에 알맞은 처리
}
catch(예외2){
	//예외2에 알맞은 처리
}

 

 

 

 

 

 

ex) try-catch 문 예시

 

 

예외 처리 전

 

9번 구문에서 오류가 발생했다.

배열의 인덱스는 0번 1번인데

c에서는 a[2]로 인덱스 2번 표기했기 때문에 오류가 발생한다.

 

 

예외 처리 후

 

구문을 모두 작성한 후 오류가 발생할 수 있는 문장을 try 중괄호 안에 위치 시킨다.

그리고 catch 문을 이용하여 예외가 발생했을 때의 경우에 따른 실행을 할 수 있도록 한다.

위의 구문에서는 12번에서 오류가 발생하여 상관 없지만

만약 10번에서 오류가 발생한다면 다음 구문들은 실행되지 않는다.

 

 

 

 

 

 

- finally 문

 

: try-catch 문에서 finally 구문을 추가한다.

finally는 없어도 무관하지만 오류에 상관 없이 실행되어야하는 구문이 있을 때 사용한다.

 

 

 

try{
	//예외 발생할 가능성이 있는 문장들
}
catch(예외1){
	//예외 1에 알맞은 처리
}
catch(예외2){
	//예외2에 알맞은 처리
}
finally{
	//예외 여부와 관계없이 실행되는 부분
}

 

 

 

 

 

ex) try-catch -finally 문 예시

 

 

package chapter8;

public class Finally 
{

	public static void main(String[] args) 
	{

		int a = 0;
		int b = 2;
		
		try 
		{
		System.out.println("외부로 접속");
		int c = b/a;
		}
		catch(Exception e) //exception는 ArithmeticException의 부모 클래스 
		//다형성
		{
			System.out.println("오류가 발생했습니다.");
		}
		finally {
			System.out.println("무조건 연결해제");
		}
		

	}

}

 

 

외부로 접속
오류가 발생했습니다.
무조건 연결해제

 

 

 

 

 

9-4. 객체로서의 예외

 

: 자바는 객체지향 언어로써 예외 또한 객체로 처리한다.

ArthmeticException 이나 ArrayIndexOutOfBoundsException 모두 객체이다.

그리고 모두 Exception이라는 부모 클래스 안에 속한다.

그러므로 예외처리도 상속 개념을 적용시킬 수 있다.

 

try{
	//예외 발생할 가능성이 있는 문장들
}
catch(Exception e){
	//알맞은 처리
}

Exception e를 파리미터 값으로 주었다.

Exception이라는 부모 클래스를 e라는 참조변수에 담아 사용하므로 ArthmeticException 이나 ArrayIndexOutOfBoundsException 등 다른 예외 객체들을 사용할 수 있다.

 

 

 

 

 

 

 

9-5. 예외 발생 throw

 

: 고의로 예외를 발생시키는 것이다.

예외 클래스의 인스턴스를 생성한 다음 throw를 사용하여 직접 예외를 발생시킨다.

 

 

Exception e = new Exception("Exception");
throw e;  //예외 발생

 

 

ex) throw 사용 예시

package chapter8;

public class exception2 
{

	public static void main(String[] args) 
	{

		try 
		{
		Exception e = new Exception("고의 예외");
		throw e;
		}
		catch(Exception e) 
		{
			System.out.println("예외 발생");
			System.out.println(e.getMessage());
		}

	}

}

 

예외 발생
고의 예외

 

 

 

 

 

 

9-6. 예외 던지기(throws)

 

: 예외가 발생했을 때 예외를 처리하지 않고 자신 호출한 위치로 넘기는 것

예외 발생과 구분이 필요한다.

 

 

 

 

 

 

9-7. 사용자 정의 예외

 

: 사용자가 예외 클래스를 직접 정의하는 것.

기존 자바가 제공하는 예외말고 다른 예외를 표현하고 싶을 경우 사용한다.

 

 

 

 

package chapter8;

class AgeException extends Exception  //AgeException 클래스는 Exception을 상속한다.
{
	public AgeException() {}
	public AgeException(String message) 
	{
		super(message);
	}
}

public class exception5 
{
	public static void ticketing(int age) throws AgeException  //예외던져줌
	{
		if(age<0) //-19<0 참값 if문 실행
		{
			throw new AgeException("나이 입력이 잘못되었습니다.");
		}
	}

	public static void main(String[] args) 
	{
		int age = -19;
		try 
		{
			ticketing(age);
		}
		catch(AgeException e) //ageexception 클래스를 담은 참조변수e를 파라미터로 사용
		{
			e.printStackTrace();
		}
	}
	
}

 

 

chapter8.AgeException: 나이 입력이 잘못되었습니다.
	at chapter8.exception5.ticketing(exception5.java:18)
	at chapter8.exception5.main(exception5.java:27)

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday