안녕하세요.
이번 포스팅에는 강제 예외 발생과
사용자 정의 예외 클래스에 대해 알아보도록 하겠습니다.
예외 강제 발생은
코드 실행 흐름에 따라, 예외가 필요한 곳에 강제로 예외를 발생시키는 것을 말하며
사용자 정의 예외 클래스는
자바 표준 API에서 제공하는 예외 클래스 이외에
사용자가 직접 정의하는 예외 클래스를 의미합니다.
일반 예외로 선언하는 경우
Exception 클래스를 상속 받아 처리하고
실행 예외로 선언하는 경우 RuntimeException을 상속받아 처리합니다.
저희는 위 일반예외 및 실행예외를 제외한
직접 예외를 만들어 처리해 보겠습니다.
이번에는 ATM 기능을 만들어 보도록 하겠습니다.
먼저 잔고 / 입금 / 출금 기능을 담당할
Account 클래스
ATM UI 부분을 담당할
AccountEx 클래스
예외처리 클래스 중 Throwable 클래스를 상속받을
BalanceException 클래스
예외처리 메세지 전달을 위해 BalanceException 클래스를
상속받을 AccountException 클래스
이렇게 4개의 클래스를 만들어주세요.
그 후 기능 담당 클래스인
Account 클래스를 작성하도록 하겠습니다.
코드 리뷰를 하면서 내려가도록 하겠습니다.
우선 잔액을 저장한 balanced 변수를 private로 이 클래스 외에 다른 곳에서 접근할 수 없게
선언해 줍니다.
그 후 생성자를 만들고 getter / setter 도 만들어 줍니다.
그 후 입금 기능이 될 수 있게
입력된 값을 전달받아 기존 값이 덧셈 연산을 해줄 deposit 메소드를 만들고
출금 기능이 될 수 있게
입력된 값을 전달받아 기존 금액과 출금 금액을 비교하고
기존 금액이 더 적다면 사용자 정의 예외를 발생시켜 출금을 막고
그게 아니라면 기존 금액에 입력된 값을 빼서 잔고에 저장하는
withdraw 메소드를 만듭니다.
이번엔 ATM UI 부분을 담당할
AccountEx를 작성해 보도록 하겠습니다.
코드 리뷰를 하고 넘어가도록하겠습니다.
입력을 위한 스캐너 객체를 생성하고
기능을 담당할 Account 객체를 생성합니다.
그 후 ATM 입력 번호를 담당할
변수를 선언 후 초기화하고
입금액인 deposit 출금액인 withdraw를 선언 후 초기화 해줍니다.
그 후 무분별한 출금 오류를 막을 count 변수와
ATM 종류를 선택할 ATM 문자열 변수를 선언 후 초기화 해 줍니다.
그 후 한번 이상은 무조건 실행되어야 하기 때문에
do ~ while 문을 작성하고
3번 이상 비밀번호 및 출금 오류 시
정지될 수 있게 while문 반복 조건은
count가 3이 아닐 때까지 반복해 줍니다.
그 후 ATM 기능인
1. 입금
2. 출금
3. 잔액확인
4. 종료
출력문을 작성하고
4를 입력했을 때 바로 종료될 수 있게
if 조건으로 작성해 줍니다.
그 후 스위치 문으로
각 기능을 작성해 줍니다.
그 후 카운트 값이 누적되었을 때
출력되는 출력문과
그냥 종료했을 때 출력문을
if 조건으로 컨트롤해 줍니다.
그 후 Throwable을 상속받을
BalanceException 클래스를 작성해 보도록 하겠습니다.
이렇게 Throwable을 상속받고
message 변수를 만들어
넘어온 message 값이 없을 경우 기본값으로 "잔액이 부족합니다"
라는 출력값이 출력되게 Exception 기능을 만들어 줍니다.
그 후 BalanceException을 상속받을 AccountException 클래스를 작성해 줍니다.
BalanceException에서 넘어온 값을
상속받은 message 객체에 다시 담아
기본 생성자가 호출될 때 message 값이 출력될 수 있게
출력문을 작성해 줍니다.
이렇게 하여 사용자 정의 예외와 강제 예외발생이 완성되었습니다.
결괏값을 한 번 보도록 하겠습니다.
이렇게 정상적으로 사용자 정의 예외클래스와
강제 예외 도 정상적으로 동작하고
프로그램도 정상 작동 하는 것을 확인할 수 있습니다.
이렇게 직접 클래스를 작성하여
예외 클래스를 만들 수도 있습니다.
예외 강제발생과 사용자 정의 예외 클래스를
다뤄봤는데 이해가 좀 되시나요?
이해가 안 되시는 부분은 댓글을 남겨주시면
성심성의껏 답변하도록 하겠습니다.
다음 포스팅은 패키지에 대해 포스팅해보도록 하겠습니다.
감사합니다 :)

'개발언어 > JAVA' 카테고리의 다른 글
Java 개발을 위한 기본 API_1 (0) | 2023.09.19 |
---|---|
Java 개발을 위한 패키지(Pakage) (0) | 2023.09.17 |
Java 개발을 위한 예외전가(Exception Throws) (0) | 2023.09.17 |
Java 개발을 위한 Exception AutoClose(try-with-resources) (0) | 2023.09.17 |
Java 개발을 위한 다중Catch 멀티Catch 예외처리(Exception) (0) | 2023.09.17 |