728x90
반응형
프로그래머스 자바 입문 강의를 학습 목적으로 정리하여 포스팅합니다.
1. Exception
예외란 프로그램 실행 중 예기치 못한 사건
예외 처리란 예외 상황을 미리 예측하고 처리하는 것
- 오류가 발생할 예상 부분을 try라는 블록으로 감싼 후, 발생할 오류와 관련된 Exception을 catch라는 블록에서 처리
- 오류가 발생했든 안했든 무조건 실행되는 finally 블록(생략 가능)
public class ExceptionExam{
public static void main(String args[]){
int i = 10;
int j = 0;
try{
int k = i / j;
System.out.println(k);
// 어떤 Exception이 발생할지 모를 때는 catch(Exception e)
}catch(ArithmeticException e){
System.out.println("0으로 나눌 수 없습니다. : " + e.toString());
}finally{
System.out.println("오류가 발생하든 안하든 무조건 실행되는 블록입니다.");
}
}
}
// 실행결과
// 0으로 나눌 수 없습니다. : java.lang.ArithmeticException: / by zero
// 오류가 발생하든 안하든 무조건 실행되는 블록입니다.
- Exception을 처리하지 않으면 프로그램이 강제 종료되지만 catch 블록으로 Exception을 처리하면 강제 종료 되지 않고 실행된다
- try 블록에서 여러 종류의 Exception이 발생하면 catch 블록을 여러 개 둘 수 있다
- Exception 클래스들은 모두 Exception 클래스를 상속 받으므로, 예외 클래스에 Exception을 두게 되면 어떤 오류가 발생하든지 간에 하나의 catch 블록에서 모든 오류 처리 가능
2. Throws
throws는 예외가 발생했을 때 예외를 호출한 쪽에서 처리하도록 던져준다.
public static void main(String[] args){
int i = 10;
int j = 0;
// 오류 처리문 try catch
try{
int k = divide(i, j);
System.out.println(k);
}catch(ArithmeticException e){
System.ot.println("0으로 나눌 수 없습니다.");
}
}
// divide 메소드는 ArithmeticException이 발생하니 divide메소드를 호출하는 쪽에서 오류를 처리하라는 코드
public static int divide(int i, int j) throws ArithmeticException{
int k = i / j;
return k;
}
3. Exception 발생시키기
public static void main(String[] args){
int i = 10;
int j = 0;
// throws를 통해 오류를 처리하는 try문
try{
int k = divide(i, j);
System.out.println(k);
}catch(IllegalArgumentException e){
System.out.println("0으로 나누면 안됩니다.");
}
}
public static int divide(int i, int j) throws IllehalArgumentException{
if(j==0){
// throw는 해당 라인에 Exception이 발생한다는 의미
// new 연산자를 통하여 IllehalArugumentExceptio 객체 생성
throw new IllehalArgumentException("0으로 나눌 수 없어요.");
}
int k = i / j;
return k;
}
4. 사용자 정의 Exception
직관성을 높이는 효과
checked Exception | Exception 클래스를 상속 받아 정의 반드시 오류를 처리 해야만 하는 Exception 예외 처리하지 않으면 컴파일 오류를 발생 시킨다. |
unChecked Exception | RuntimeException 클래스를 상속 받아 정의 예외 처리하지 않아도 컴파일 시에는 오류를 발생시키지 않는다 |
// RuntimeException을 상속 받은 BizException 객체
public class BizException extends RuntimeException{
public BizException(String msg){
super(msg);
}
public BizException(Exception ex){
super(ex);
}
}
// BizService 클래스는 업무를 처리하는 메소드
public class BizService{
public void bizMethod(int i)throws BizException{
System.out.println("비즈니스 로직이 시작됩니다.");
if(i < 0){
throw new BizException("매개변수 i는 0 이상이어야 합니다.");
}
System.out.println("비즈니스 로직이 종료됩니다.");
}
}
// BizService를 이용하는 BizExam 클래스
public class BizExam{
public static void main(String[] args){
BizService biz = new BizService();
biz.bizMethod(5);
try{
biz.bizMethod(-3);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
/*
실행 결과
비즈니스 로직이 시작됩니다.
비즈니스 로직이 종료됩니다.
비즈니스 로직이 시작됩니다.
javaStudy.BizException: 매개변수 i는 0이상이어야 합니다.
at javaStudy.BizService.bizMethod(BizService.java:7)
at javaStudy.BizExam.main(BizExam.java:9)
*/
728x90
반응형
'JAVA > [프로그래머스] 자바 강의' 카테고리의 다른 글
[프로그래머스] 자바 중급 강의 part2. java.lang 패키지 (0) | 2023.01.30 |
---|---|
[프로그래머스] 자바 중급 강의 part1. Object 클래스 (0) | 2023.01.29 |
[프로그래머스] 자바 입문 강의 part8. 인터페이스와 다른 형식의 클래스 (1) | 2023.01.16 |
[프로그래머스] 자바 입문 강의 part7. 상속 (0) | 2023.01.16 |
[프로그래머스] 자바 입문 강의 part6. 클래스 다듬기 (1) | 2023.01.16 |