관리 메뉴

오버플로

[Java] Exception Handling - throws / throw / 사용자 정의 예외처리 Class 본문

Java

[Java] Exception Handling - throws / throw / 사용자 정의 예외처리 Class

NACO 2021. 8. 26. 23:14

1. throws (예외 날림)

- method 뒤에 정의하여 method 안쪽에서 발생된 예외를 호출한 곳에서 처리하도록 할 때 사용

- method를 호출한 곳에서 예외를 처리함 (예외가 발생된 곳과 예외를 처리하는 코드를 분리할 수 있음)

- 예외를 날리면 method 안에서는 해당 예외를 try~catch로 처리할 필요가 없음

- method를 호출한 곳에서는 throws된 Exception을 try~catch

  or 또 다른 method로 throws

- 문법) method header의 가장 마지막에 정의

   public void test() throws 예외처리클래스명,,,(여러 개 가능)  {

    }

 

* throws 예외처리클래스명

 - CompileException/RumtimeException 다 가능

 - method 안에서 발생된 예외

 

* try ~ finally 문법 :

- method 안에서 같은 Exception이 여러 개 발생했을 때,

  method header에서 throws를 사용하면 method를 호출한 곳에서 한 번만 try~catch 처리하면 되므로

  method 내에서는 try문과 반드시 실행해야 할 finally문만 남게 됨

 

2. throw (예외 강제 발생)

- 개발자가 특정 상황에서 예외를 발생시켜 코드를 처리하는 방법

- 발생된 예외는 try~catch 또는 thorws(권장)로 처리 (throw는 throws로 처리하는 걸 권장)

- 사용자 정의 예외처리 클래스와 같이 사용됨

- 문법) throw new 예외처리클래스();

 

3. 사용자 정의 예외처리 클래스

- java에서 제공하는 예외처리 클래스가 현재 구현하는 업무에 부합되는 것이 없을 때,

  현재 업무에 맞는 예외처리 클래스를 제작하여 사용하는 것 (가독성향상)

 Ex) 로그인 실패 상황에 대한 예외처리 : FailedLoginException (java에서 예외 제공함)

     입금하는 일에 대한 예외처리 : java에서 제공하는 예외처리 클래스가 없음 (내가 만들자!)

- 작성법)

1. 내가 만든 클래스가 예외의 처리기능을 가지고 있어야 함 -> 상속으로 처리

2. Exception 만들기 (class naming : 업무명+Exception으로 naming  (Ex.TestException) )

- CompileException : Exception 상속

- RuntimeException : RuntimeException 상속

      Ex) public class TestException extends Exception or extends RuntimeException{  

           public TestException(){

           super(“예외가 발생했을 때 출력할 메시지”) }


# 오늘의 코딩 #

 - 초등학생일 경우에만 예외를 발생시켜보자

- 사용자 정의 예외처리 클래스를 작성하고, method에서 throw/throws한 다음 

  호출 시킨 곳에서 예외처리하기!

import java.util.Random;

/**
 * 사용자정의 예외처리 클래스를 사용해보자<br>
 * 초등학생은 예외발생시키기
 * @author user
 */
public class UseThrow {

	public String checkAge() throws AgeException{
		String result = "";

		String[] schoolGrade = {"초등학생","중학생","고등학생","대학생"};
		
		Random random = new Random();
		int flag = random.nextInt(schoolGrade.length);
		
		if(flag==0) {//초등학생인 경우 예외를 발생시킴
			throw new AgeException(schoolGrade[flag]+ " 입장불가 / 중학생 이상만 입장 가능합니다!");
		}// end if
		
		result = schoolGrade[flag] +" 입장 가능";
		return result;
	}//checkAge
	
	public static void main(String[] args) {
		UseThrow ut = new UseThrow();
		
		try {
			String result = ut.checkAge();
			System.out.println(result);
		} catch (AgeException e) {
			e.printStackTrace();
		}//end catch
		
	}//main

}//class

 

- 사용자 정의 예외처리 클래스는 간단하게 만든당

@SuppressWarnings("serial")
public class AgeException extends Exception {
	
	public AgeException() {
		this("어린이는 입장 불가합니다.");
	}// AgeException

	public AgeException(String msg) {
		super(msg);
	}// AgeException

}// AgeException

 

# 출력 결과 #

 

1) 초등학생이 아닌 경우 정상 처리 : 

대학생 입장 가능

2) 초등학생인 경우 예외 발생 :

AgeException: 초등학생 입장불가 / 중학생 이상만 입장 가능합니다!
at UseThrow.checkAge(UseThrow.java:19)
at UseThrow.main(UseThrow.java:30)

 

 

Comments