본문 바로가기

IT/연습문제

자바 연습문제 : 예외처리(try~catch)

반응형

문제

 

로그인 기능을 Member 클래스의 login() 메소드에서 구현하려고 한다. 존재하지 않는 ID를 입력했을 경우 NotExistIDException을 발생시키고, 잘못된 패스워드를 입력했을 경우 WrongPasswordException을 발생시키려고 한다.

LoginExample의 실행 결과를 보고 코드를 작성해보자.

 

LoginExample 실행결과

 

[NoExistIDException.java]

 

1
2
3
4
5
6
7
public class NoExistIDException extends Exception{
    public NoExistIDException () {}
    public NoExistIDException (String message) {
        super(message);
    }
}
 
cs

사용자 정의 예외 클래스 선언

1. 사용자 정의 예외 클래스의 이름은 Exception으로 끝나는게 좋다.

2. 사용자 정의 예외 클래스도 필드, 생성자, 메소드 선언들을 포함할 수 있지만

   대부분 생성자 선언만을 포함한다.

3. 생성자는 두 개를 선언하는게 일반적이다.

    1) 매개 변수가 없는 기본 생성자

    2) 예외 발생 원인(예외 메세지: 아이디가 존재하지 않습니다.)을 전달하기 위해

       String 타입의 매개 변수를 갖는 생성자

4. String 타입의 매개 변수를 갖는 생성자는 상위 클래스의 생성자를 호출(super(message);)

   하여 메세지를 넘겨준다.

[WrongPasswordException.java]

 

1
2
3
4
5
6
public class WrongPasswordException extends Exception {
    public WrongPasswordException () {}
    public WrongPasswordException (String message) {
        super(message);
    }
}
cs

 

[LoginExample.java]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class LoginExample {
 
    public static void main(String[] args) {
        try {
            login("write","12345");
        } catch (Exception e) {
            System.out.println(e.getMessage());
            
        }
        
        try {
            login("blue","54321");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    
    public static void login (String id , String password) throws Exception {
        //id가 "blue"가 아니라면 NoExistIdException 발생시킴
        if (!id.equals("blue")) {
            throw new NoExistIDException("아이디가 존재하지 않습니다.");
        }
        
        //password가 "12345"가 아니라면 WrongPasswordException을 발생시킴
        if (!password.equals("12345")) {
            throw new WrongPasswordException("패스워드가 틀립니다.");
        }
    }
}
cs

1. throw 키워드를 통해 예외를 발생시킨다.

2. 예외의 내용을 Exception 객체에 넘겨주기 위해 String 매개변수를 갖는 생성자를 부른다. 

3. login() 메소드 안에서 예외가 발생하면 그 예외가 생성자의 super();에 의해 Exception으로 넘어가고 login() 메소드가 호출된 곳(try {} 내부)에서 해당 예외를 발생시킨다.

4. 해당 예외를 catch문에서 잡아 Exception 클래스 객체 e의 getMessage()메소드를 통해 예외 내용을 출력시킨다.

반응형