전공영역 공부 기록

자바 커스텀예외 생성

악분 2020. 9. 4. 18:16
반응형

김영환님의 스프링부트 강의를 보면서 커스텀 예외를 만드면 유지보수에 좋을 것 같다는 생각이 들었습니다. 예외 이름만 봐도 어떤 상황에서 오류가 발생할 거라고 추측할 수 있기 때문입니다.

 


예제: 회원을 찾을 수 없는 경우

고유식별번호로 회원을 검색했지만 해당회원이 없는 경우 예외를 발생시켜 프로그램을 중단하는 시나리오입니다.

▶소스코드: github.com/sungwookJAVA/CustomException

 

1. 예외함수 생성

1.1 RuntimeException 상속

FailFinduserid클래스를 만들고 RuntimeException함수를 상속받았습니다. userid에 해당하는 회원을 못찾은 상황을 이름으로 표현했습니다.

 

 

1.2 예외 생성자 생성

상속함수를 기반으로 생성자를 만들어줘야 만든 예외함수에 메세지를 전달 할 수 있습니다. 이클립스 기준 Source -> Generate Constructors from Superclass를 클릭합니다.

▶인텔리제이는 Alt + Insert를 누르면 됩니다.

이클립스 예외함수 생성자 생성

 

생성자 목록이 체크된 것을 확인하고 Generate버튼을 클릭합니다.

생성자 함수 선택

 

선택한 생성자가 자동으로 생성되었습니다. 각 생성자는 RuntimeException생성자를 호출하는 Super()함수를 호출하고 있습니다.

예외 생성자 생성

 

예외 함수 생성은 이걸로 끝났습니다. 다른 사람이 이 예외함수 이름을 보고 무슨 의도로 만들었는지 금방 이해할 것으로 생각합니다.

 

 

2. 예외 발생

이제 이 예외를 강제로 발생시켜보겠습니다. 존재하지 않은 회원 검색 시나리오를 구현하기 위해 회원 클래스를 만들고 예외를 발생시켜보겠습니다.

 

2.1 회원 클래스 생성

회원은 고유식별번호 id와 이름을 갖습니다. findUserById함수는 id기반으로 회원을 검색합니다. 존재하지 않는 회원검색 시나리오를 실행하기 위해서 일부로 null을 리턴합니다.

package Main;

import java.util.Optional;

public class User {
	private String user_id;
	private String name;
	
	/***
	 * Id기반 회원검색
	 * @param id
	 * @return null: 일부로 회원검색을 실패했다고 가정
	 */
	public Optional<User> findUserById(int id) {
		 return Optional.empty();
	}
}

 

2.2 예외 발생

0번 ID를 갖는 회원을 검색하고 없으면 FailFinduserid예외를 발생시키는 예제입니다. 회원검색은 항상 null을 리턴하므로 예외가 발생합니다.

package Main;

import java.util.Optional;

import javax.security.auth.login.FailedLoginException;

public class Main {

	public static void main(String[] args) {
		
		// 0번 Id를 가진 회원검색을 실패했다고 가정
		Optional<User> findUser = new User().findUserById(0);
		
		findUser.orElseThrow(
				() -> new FailFinduserid("회원 검색을 실패했습니다")
		);
	}

}

 

소스코드를 실행하면 예외가 발생합니다.

예외 발생

 

 

반응형