에러를 직접 해결하는 것이 아니다. 프로그램에 문제가 될 만한 부분을 예상하여 사전에 “문제가 발생하면 이렇게 처리하라!” 라고 프로그래밍 하는 것을 예외 처리라고 한다.
예외 발생 가능성이 있는 코드를 작성
, try 블록의 코드가 예외 발생 없이 정상 실행되면 catch 블록은 실행되지 않는다. public static void main(String[] args) {
int n1 = 10, n2 = 0;
System.out.println("나눗셈 시작!");
try {
int result = n1 / n2; // 예외 발생 가능성이 있는 코드
} catch(Exception e) {
// 예외가 발생했을 경우 프로그래밍이 튕기는 대신 실행할 코드
System.out.println("0으로 나누면 안됩니다~");
}
System.out.println("나눗셈 정상 종료!");
}
public class TryExample2 {
/*
Object
|
Throwable
/ \
Error Exception (예외 정보를 가지고 있는 객체)
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
System.out.print("정수1: ");
int n1 = Integer.parseInt(sc.next()); // NumberFormatException
System.out.print("정수2: ");
int n2 = sc.nextInt(); // InputMismatchException
int result = n1 / n2; // ArithmeticException
System.out.println("result = " + result);
} catch (InputMismatchException e) {
System.out.println("정수를 입력하시라니까요~?");
} catch (NumberFormatException e) {
System.out.println("문자로 변환할 수 없는 숫자입니다.");
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
e.printStackTrace(); // 에러 로그를 띄움 - 개발시에 유용
} catch (Exception e) { // 기타 등등의 에러 처리
System.out.println("알 수 없는 에러입니다.");
}
System.out.println("프로그램 정상 종료!");
}
}
e.printStackTrace();
를 통해 에러 로그를 띄울 수 있다. // 문자열을 정수로 변환하는 메서드
public int convert(String str) throws NumberFormatException {
int n = Integer.parseInt(str);
return n;
}
covert 메서드를 실행할 때 NumberFormatException 예외가 생길 수 있으니 조심하고 반드시 try ~ catch 구문을 만들어서 예외 처리를 해서 사용해
라는 말을 내포하고 있다.
public class LoginUser {
private String account; // 가입시 계정명
private String password; // 가입시 패스워드
public LoginUser(String account, String password) {
this.account = account;
this.password = password;
}
public enum LoginStatus {
SUCCESS, ID_FAIL, PW_FAIL
}
// 로그인 검증
public LoginStatus loginValidate(String inputAccount, String inputPassword) throws InvalidLoginInputException {
// 아이디가 일치하는가?
if (!inputAccount.equals(account)) {
// 상수를 return 하는 것 보다 시스템적으로 훨씬 더 강력하게 알림
// return LoginStatus.ID_FAIL;
throw new InvalidLoginInputException("계정이 일치하지 않습니다.");
}
// 비번이 일치하는가?
if (!inputPassword.equals(password)) {
// return LoginStatus.PW_FAIL;
throw new InvalidLoginInputException("비밀번호가 일치하지 않습니다.");
}
System.out.println("로그인이 성공했습니다.");
// return LoginStatus.SUCCESS;
}
}
package day10.exception;
public class InvalidLoginInputException extends Exception {
public InvalidLoginInputException() {
}
public InvalidLoginInputException(String message) {
super(message);
}
}