java - try-catch-throws

imjingu·2023년 9월 10일
0

개발공부

목록 보기
469/481

예외 던지기란 예외가 발생했을 경우 현재 메서드가 예외를 처리하지 않고 자신을 호출한 쪽으로 예외처리에 대한 책임을 넘기는 것
예외 던지기는 호출한 쪽으로 책임을 넘기기 때문에 호출한 쪽에 대한 문법적 강제성이 발생
예외를 넘겨받은 쪽은
1) 반드시 직접 예외처리를 하거나
2) 자신도 예외를 던져야 끝

package chapter20230908;

public class ExceptionTest09 {

	public static void methodA() throws Exception {
		methodB(); // methodB 로 던짐
	}
	
	public static void methodB() throws Exception {
//		methodC(); // methodC 로 던짐
		try {
			methodC();
		}
		catch (Exception e) { // methodC() 로 던지지 않고 바로 처리 가능
			System.out.println("methodB에서 처리");
		}
	}
	
	public static void methodC() throws Exception {
		Exception e = new Exception(); // 예외 발생시킴
		throw e;
	}
	
	public static void main(String[] args) {
		try {
			methodA();
		} catch (Exception e) {
			System.out.println("메인에서 처리");
		}

	}

}

package chapter20230908;

class MyException extends Exception {
	/* 사용자 정의 예외. Exception 클래스를 상속 받음 */
	public MyException(String message) {
		super(message);
	}
}

class MyScore {
	private int score;
	
	public void setScore(int score) throws MyException {
		/* Score 필드의 setter 선언부에 예외 던지기 선언 */
		if(score < 0) {
			throw new MyException("점수는 음수가 될수 없습니다");
		}
		else {
			this.score = score;
		}
	}
}
public class ExceptionTest10 {

	public static void main(String[] args) {
		MyScore myScore = new MyScore();
		try {
			myScore.setScore(-10);
		}
		catch(MyException e) {
			System.out.println(e.getMessage());
		}

	}

}

package chapter20230908;

class IdFormatException extends Exception {
	/* 사용자 정의 예외. Exception 클래스를 상속 받음
	  이름을 보면 id의 형식 관련 기능으로 유추 */
	public IdFormatException(String message) {
		super(message);
	}
}

class Member {
	private String userId;
	
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) throws IdFormatException {
		/* userId 필드의 setter 
		   메서드 선언부에 예외 던지기 적용. 호출하는 쪽에서 예외 처리
		 */
		if(userId == null) {
			throw new IdFormatException("아이디는 null 일 수 없습니다.");
		}
		else if(userId.length() < 8 || userId.length() > 20) {
			throw new IdFormatException("아이디는 8자 이상 20자 이하로 쓰세요");
		}
		this.userId = userId; //예외가 발생하지 않을 경우에 입력
	}
}

public class ExceptionTest11 {

	public static void main(String[] args) {
		Member member = new Member();
		String userId = null;
		try {
			member.setUserId(userId); // userId에 null을 사용
		} catch (IdFormatException e) {
			System.out.println(e.getMessage());
		}
		
		userId = "1234567";
		try {
			member.setUserId(userId); // userId의 길이 수에 맞지 않음
		} catch (IdFormatException e) {
			System.out.println(e.getMessage());
		}

	}

}

0개의 댓글