럿고의 개발 노트
[프로그래머스] 자바 입문 > Part9. 예외처리 본문
[프로그래머스] 자바 입문
Part9. 예외처리
1. Exception
인터페이스 만들기
- 프로그램 실행 중 예기치 못한 사건을 예외라고 한다.
- 예외 상황을 미리 예측하고 처리할 수 있는데, 이것을 예외처리라고 함.
- 예외처리 문법
- 오류가 발생할 예상 부분은 try 블록으로 감싼 후, 발생할 오류와 관련된 Exception을 catch라는 블록에서 처리
- 오류가 발생했든 안했든 무조건 실행되는 finally 블록을 가질 수 있음(생략 가능)
try { 오류날것 같은 구문 } catch(오류) { 오류 발생시 실행문 } finally { 오류가 발생하던 발생하지 않던 무조건 실행될 문 }
- try블록에서 여러 종류의 Exception이 발생한다면 catch블록을 여러개 둘 수 있음.
- Exception클래스들은 모두 Exception클래스를 상속받으므로, 예외 클래스에 Exception을 두게 되면 어떤 오류가 발생하든지 간에 하나의 catch블록에서 모든 오류를 처리할 수 있음.
public class ExceptionExam {
public static void main(String[] args) {
int i = 10;
int j = 0;
/* try-catch-finally
* try{ // 실행할 코드
* ....
* } catch(예외클래스 변수명) { // 예외 처리 블록
* ....
* } finally{ // 예외 발생 여부 상관없이 반드시 실행(생략가능)
* ....
* }
*/
try {
int k = 1 /j;
}catch(ArithmeticException e) { // 예외가 발생하지 않으면 실행하지 않음
System.out.println("0으로 나눌 수 없습니다." + e.toString()); //e.toString은 예외 정보를 알려주는 메소드
}finally {
System.out.println("오류 여부 상관없이 실행");
}
System.out.println("Main End!");
// catch문은 여러개가 가능
// Exception클래스는 모든 Exception클래스를 상속받기 때문에 모든 예외처리 가능
}
}
2. Throws
throws
- 예외가 발생했을 때 예외를 호출한 쪽에서 처리하도록 던져줌
public class ExecptionExam2 {
public static void main(String[] args) {
int i = 10;
int j = 0;
try {
int k = divide(i, j);
}catch(ArithmeticException e) {
System.out.println(e.toString());
}
}
public static int divide(int i, int j) throws ArithmeticException {
// 오류를 메서드 내에서 처리하지 않고 메소드를 실행하는 곳에 떠넘기는것이라고 생각하면 됨
// 오류를 여러개 넘길수도 있음.
// Exception도 사용 가능
int k = i/j;
return k;
}
}
3. Exception 발생시키기
Exception 발생시키기
강제로 오류를 발생시키는 throw
throw는 오류를 떠넘기는 throws와 보통 같이 사용
public class ExecptionExam3 {
public static void main(String[] args) {
int i = 10;
int j = 0;
try {
int k = divide(i, j);
}catch(IllegalArgumentException e) {
System.out.println(e.toString());
}
}
public static int divide(int i, int j) throws IllegalArgumentException {
// 강제로 오류를 발생시키는 throw
// throw는 오류를 떠넘기는 throws와 보통 같이 사용
if(j == 0 ) {
throw new IllegalArgumentException("0으로 나눌 수 없습니다.");
}
int k = i/j;
return k;
}
}
4. 사용자 정의 Exception
사용자 정의 Exception
Exception 클래스를 상속 받아 정의한 checked Exception
- 반드시 오류를 처리해야만 하는 Exception
- 예외 처리하지 않으면 컴파일 오류를 발생시킴
RuntimeException 클래스를 상속 받아 정의한 unChecked Exception
- 예외 처리하지 않아도 컴파일 시에는 오류를 발생 시키지 않음
public class BizException extends RuntimeException { // unChecked Excpetion
// 사용자 정의 Exception
// public class 클래스이름 extends Excption{
// ...
// }
// Exception이나 Exception의 후손을 상속받아 만들어진 클래스
// 클래스의 이름만으로 어떤 오류가 발생했는지 알려주어 코드의 직관성을 높임
// 상속받은 Exception들을 Checked Exception이라고 함
// 반드시 오류를 처리 해야 함
// Runtime Exception클래스를 상속 받은 unChecked Exception
// 예외 처리를 하지 않아도 컴파일 시에는 오류 발생하지 않음
// 생성값만 정의해주면 됨
public BizException(String msg) {
super(msg);
}
public BizException(Exception ex) {
super(ex);
}
}
public class BizService {
public void bizMethod(int i) throws BizException{
System.out.println("비즈니스 메소드 시작");
if(i < 0) {
throw new BizException("매개변수 i는 0 이상이어야 합니다.");
}
System.out.println("비즈니스 메소드 종료");
}
}
public class BizExam {
public static void main(String[] args) {
BizService biz = new BizService();
biz.bizMethod(5);
try {
biz.bizMethod(-3);
}catch(Exception e) {
e.printStackTrace();
}
}
}
※ 출처
'Java Note > [프로그래머스] 자바 입문(동영상 강의)' 카테고리의 다른 글
[프로그래머스] 자바 입문 > 마무리 (0) | 2020.01.30 |
---|---|
[프로그래머스] 자바 입문 > Part8. 인터페이스와 다른 형식의 클래스 (0) | 2020.01.29 |
[프로그래머스] 자바 입문 > Part7. 상속 (0) | 2020.01.27 |
[프로그래머스] 자바 입문 > Part5. 클래스와 객체 (0) | 2020.01.23 |
[프로그래머스] 자바 입문 > Part4. 배열 (0) | 2019.12.20 |
Comments