티스토리 뷰
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)
'코딩 > JAVA' 카테고리의 다른 글
[3주차 4일] Chapter 10. 기본 API 클래스 알아보기 (0) | 2023.10.26 |
---|---|
[3주차 3일] Chapter 10. 기본 API 클래스 알아보기 (0) | 2023.10.25 |
[3주차 2일] Chapter 8. 추상 클래스와 인터페이스 내부 클래스 (0) | 2023.10.24 |
[3주차 1일] Chapter 8. 추상 클래스와 인터페이스 내부 클래스 (1) | 2023.10.23 |
[3주차 1일] Chapter 7 .상속과 다형성 (0) | 2023.10.23 |
- Total
- Today
- Yesterday