자바는 로직 실행 중 처리할 수 없는 경미한 에러들이 발생하게 되면 프로그램 실행을 중단하고 오류 메시지를 보여준다.
이런 오류가 발생하여 다음 로직을 실행하지 못하고 프로그램 전체가 멈춰버리는 것을 방지하기 위해, 예외처리를 할 수 있다.
예외 처리를 하기 위하여 try ~ catch 문을 사용한다.
try {
//예외가 발생 가능한 경우
} catch(exception e) {
//exception이 발생하면 해당 문장 실행
} catch(exception e) {
} . . .
try문 안의 로직을 실행하다 예외가 발생하면 catch로 빠져 해당 실행문이 동작한다.
exception e는 exception 클래스의 오류 객체 e를 뜻하며 해당 오류 발생시 이 오류 객체를 통해 예외 메서드를 호출한다.
예외는 사용자가 직접 만들기도 가능하다.
class를 새로 생성하여 로그인 예외를 의미하는 사용자 정의 예외를 만들 수 있다.
public class LoginException extends Exception {
public InValidateUserException(String m) {
super(m); //생성자 호출을 의미
}
}
[예외 발생시키기 = 예외 던지기] 라고도 부르는데,
java에서는 throw 키워드를 통해 고의로 예외를 던질 수 있다.
고의로 해당 예외를 발생시켜서 예외가 출력되는 것을 확인하기 위해 throw를 사용해보았다.
1. try문 안에서 throw로 예외 던지기(발생시키기)
2. catch가 던진 예외를 잡아서 해당 로직을 실행
public static void main (String[] args) {
try {
LoginException e = new LoginException("예외");
throw e;
} catch(LoginException e) {
System.out.println("예외가 발생했습니다." + e.getMessage());
}
}
이 내용을 바탕으로, 아이디와 패스워드를 ( )로 받아 비교한 뒤 모두 일치하면 로그인에 성공하고 일치하지 않으면 로그인 예외인 LoginException이 발생하도록 해보았다.
static boolean Login(String id, int pw) throws LoginException{
if(id.equals("apple") && pw == 11) {
System.out.println("로그인에 성공하셨습니다.");
return true;
}else {
throw new LoginException("로그인에 실패하였습니다.");
}
}
public static void main(String[] args) {
try {
boolean r = Login("apple", 11);
} catch(LoginException e) {
System.out.println(e.getMessage());
}
//로그인에 성공하셨습니다.
//main 메서드에서 pw 값을 11이 아닌 1로 바꾸면 catch가 예외를 잡아서 실행
Login 메서드 뒤에 throws LoginException을 사용해서 메서드를 호출한 곳에서 예외를 처리하도록 예외를 위로 던졌다.
따라서 Login 메서드를 호출한 main 메서드에 try ~ catch 문장이 사용되었다.