유난스런 개발 기록

[JAVA] Day-17 _ 사용자 정의 예외처리 (User Define Exception) 본문

개념정리/JAVA

[JAVA] Day-17 _ 사용자 정의 예외처리 (User Define Exception)

yourhwan 2023. 2. 6. 23:34

day-17

용자 정의 예외처리 (User Define Exception)


사용자 정의 예외처리 (User Define Exception) 이란 ? 

  • 단어의 의미 그대로 사용자 즉, 개발자가 직접 예외처리를 해주는 것이다.
  • Exception 클래스를 상속 받아야 한다.
  • 파라미터가 없는 기본 생성자 + 예외 메시지를 전달하기 위한 파라미터(String 타입)가 있는 생성자
  • 두 개의 생성자를 선언하는 것이 일반적이다.

 

JangolackException extends Exception

package my.day17.c.userDefineException;

//== 사용자(개발자)가 정의하는 예외(익셉션)절 클래스 만들기 == //
/*
	 1. Exception 클래스를 상속받아야 한다.
	 2. 생성자내에서 예외메시지(오류메시지)를 등록해주면 끝난다. 
*/

public class JangolackException extends Exception {

	// 기본생성자
	public JangolackException() {
		super(">> 잔고량이 주문량 보다 부족하므로 주문이 불가능합니다. <<");
	}
	
	
	// 파라미터가 있는 생성자
	public JangolackException(String errMsg) {
		super(errMsg);
	}
	
}

해당 클래스는 직접 예외처리를 정의해준 것이다.

extends Exception 을 통해 상속을 받았다는 것을 확인할 수 있다.

또한 기본 생성자에서 super 를 이용하여 부모 클래스의 생성자를 호출해 오류 메시지를 지정해주었고,

파라미터가 있는 생성자는 해당 메시지를 전달해주는 역할을 한다.

 

Product

public class Product {

	// field
	private String prodName; // 제품명 ("새우깡", "감자깡", "양파링")
	private int jango;		 // 잔고  (  100  ,   50  ,   150  ) 
	
	
	// method
	public String getProdName() {
		return prodName;
	}
	
	public void setProdName(String prodName) {
		this.prodName = prodName;
	}
	
	public int getJango() {
		return jango;
	}
	
	public void setJango(int jango) {
		this.jango = jango;
	}
	
	
	// 제품의 정보를 보여주는 메소드 생성
	public void info() {
		String info = "1. 제품명 : " + prodName + "\n"
					+ "2. 잔고량 : " + jango + "개\n";
		
		System.out.println(info);
	}
	
	
// 주문을 받는 메소드 생성 1
public void order(int jumunSu) throws JangolackException {
// 	order(int jumunSu) 은 파라미터로 들어오는 jumunSu 의 값에 따라서
// 사용자(개발자)가 만든 JangolackException 익셉션을 유발 할 수 있다는 말이다.
		
	if(jango < jumunSu) {
		// 잔고량이 주문량 보다 부족할 시 JangolackException 익셉션을 유발 시켜야 한다.
		throw new JangolackException();
	}
	else {
		jango -= jumunSu;
		System.out.println(prodName + " 제품을 " + jumunSu + "개 주문하셨습니다.");
	}
		
		
}// end of public void order(int jumunSu) throws JangolackException----------
	
	
// 주문을 받는 메소드 생성 2
	public void jumun(int jumunSu) throws JangolackException {
	// 	order(int jumunSu) 은 파라미터로 들어오는 jumunSu 의 값에 따라서
	// 사용자(개발자)가 만든 JangolackException 익셉션을 유발 할 수 있다는 말이다.
			
		if(jango < jumunSu) {
			// 잔고량이 주문량 보다 부족할 시 JangolackException 익셉션을 유발 시켜야 한다.
			throw new JangolackException(">> "+ prodName + "잔고가 " + jango + "개 인데 주문량이 " + jumunSu + "개라서 잔고 부족으로 주문이 불가능합니다.");
		}
		else {
			jango -= jumunSu;
			System.out.println(prodName + " 제품을 " + jumunSu + "개 주문하셨습니다.");
		}
			
	}// end of public void jumun(int jumunSu) throws JangolackException ---------
}

 

Main

public class Main {

public static void main(String[] args) {

	Product[] prodArr = new Product[3];
		
	prodArr[0] = new Product();
	prodArr[0].setProdName("새우깡");
	prodArr[0].setJango(100);
		
	prodArr[1] = new Product();
	prodArr[1].setProdName("감자깡");
	prodArr[1].setJango(50);
		
	prodArr[2] = new Product();
	prodArr[2].setProdName("양파링");
	prodArr[2].setJango(150);
		
		
	for(Product prod : prodArr) {
		
		try {
			prod.order(80); // 80개 주문
		} catch (JangolackException e) {
		//	e.printStackTrace();
			System.out.println("오류메시지 : " + e.getMessage() + "\n");
		} finally {
			prod.info();
		}	
		}// end of for--------------------
		
	System.out.println("\n------------------------------------\n");
		
	prodArr[0].setJango(100);
	prodArr[1].setJango(50);
	prodArr[2].setJango(150);
		
	for(Product prod : prodArr) {
			
		try {
			prod.jumun(80); // 80개 주문
		} catch (JangolackException e) {
		//	e.printStackTrace();
			System.out.println("오류메시지 : " + e.getMessage() + "\n");
		} finally {
			prod.info();
		}
				
		}// end of for--------------------
			
	}

}