-
[Java] 사용자 정의 예외 (Exception) 만들기Java 2023. 2. 26. 15:11반응형
자바 프로젝트를 하다보면 업무로직 안에서 고의로 예외를 발생시키는 부분들이 있다.
ex) 잔고 보다 많은 금액을 출금 요청 시 > 오류발생
어플리케이션 예외 : 개발자가 직접 정의해서 만들어야 하므로 사용자 정의 예외라고도 한다.
일반 예외로 선언 시 : Exception 상속
실행 예외로 선언 시 : RuntimeException 상속
CustomException 은 Exception 을 상속하기 때문에 컴파일러가 체크 하는 예외(일반 예외) 이다.
따라서 소스 코드 작성 시 try - catch 블록으로 예외 처리가 필요하다.파일 구조
BbsServiceImpl > BbsService > BbsController
1. 예외 작성하기
public class CustomException extends Exception { //생성자는 두 개를 선언하는 것이 일반적이다. // 1. 매개 변수가 없는 기본 생성자 public CustomException() {} // 2. 예외 발생 원인(예외 메시지)을 전달하기 위해 String 타입의 매개변수를 갖는 생성자 public CustomException(String message) { super(message); // RuntimeException 클래스의 생성자를 호출합니다. } }
2. 예외 발생시키
- 게시판 목록에서 제목이 "에러" 인것이 있으면 예외를 발생시킨다.
public void bbsListTest() throws Exception { // 예외 떠넘기기 List<BbsDto> list = bbsDao.selectListAllBbs(); for(BbsDto dto : list) { if( "에러".equals(dto.getTitle()) ) { throw new CustomException("예외 발견 : "+dto.getBno()); } } }
- throws란?
예외가 발생한 곳에서 try ~ catch 블록으로 예외를 직접 처리할 수 있지만, 자신이 직접 처리하지 않고,
메서드를 호출한 곳으로 예외를 위임(떠넘김) 할 때 throws 키워드를 사용한다.
예외 처리를 위임받은 메서드는 다시 예외 처리에 대한 책임이 발생하며, 자신이 직접 처리하거나 또 다른 곳으로 위임할 수 있다.
3. 예외 호출 (컨틀롤러)
@GetMapping("/") public void main() throws Exception{ bbsService.forEachExcepton(); }
-결과
kr.co.study.CustomException: 예외 발견 : 113]을(를) 발생시켰습니다.
kr.co.study.CustomException: 에외 발견 : 113
at kr.co.study.bbs.service.impl.BbsServiceImpl.forEachExcepton(BbsServiceImpl.java:172)
- 컨트롤러까지 예외메세지를 넘길 수 있다.
@GetMapping("/") public void main() throws Exception{ try { bbsService.forEachExcepton(); } catch(CustomException e) { // CustomException 예외가 발생한 메세지 얻기 log.info("HomeController.main 예외 호출"); System.out.println(e.getMessage()); //bbsListTest 메서드에서 발생한 예외 문구 e.printStackTrace(); // 예외 추적 후 출력 } }
-결과
INFO : kr.co.study.home.controller.HomeController - HomeController.main 예외 호출
예외 발견 : 113
kr.co.study.CustomException: 에외 발견 : 113
이런식으로 꼭 자바에서 발생하는 예외가 아닌 사용자가 임의로 업무의 관한 예외를 발생시킬 수 있다.
반응형'Java' 카테고리의 다른 글
초간단 자바로 메일보내기(구글 SMTP) 2023년 최신 (0) 2023.10.07 [java] 자주쓰는 람다식 Lambda (stream 인터페이스) 예제 (0) 2023.02.12 [java] @SuppressWarnings 란? (0) 2022.02.20 자바 예외(Exception) 및 예외 처리 개념 (0) 2020.05.26 java 람다식 lamda 여러가지 응용하기 (0) 2020.04.25