ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

     

     

    이런식으로 꼭 자바에서 발생하는 예외가 아닌 사용자가 임의로 업무의 관한 예외를 발생시킬 수 있다.

     

    반응형

    댓글

Designed by Tistory.