[Java] 예외 전가 (throws)

2022. 4. 5. 09:40· Language/Java
목차
  1. throws

throws

예외를 처리하지 않고 예외처리의 의무를 호출한 메서드에게 전달한다. 

 

예외를 다음과 같이 전달하면 된다.

예외 전가 구조

리턴 타입 메서드명(입력매개변수) throws 예외 크래스명 {
// 예외 발생 코드
}

 

a()메서드에서 b()메서드를 호출하고, b()메서드 내부에 예외가 발생할 수 있는 코드가 포함돼 있을 때를 살펴보자

 

void a(){
	b(); // 1.호출
}

// 2. 예외 처리
void b(){
	try{
    	//예외 가능 블록
    } catch (예외 클래스 타입 참조 변수) {
    	//예외 처리
    }
}

b()메서드가 스스로 예외를 처리했을 때

 

b() 메서드가 직접 예외 처리를 했다. 이때 a()메서드가 b()를 호출하여 사용하는데 문제가 없다.

 

void a(){
	try{
    	b(); // 1.호출
    }
    // 3.예외처리
    catch (예외 클래스 타입 참조 변수){
    	// 예외 처리
    }
}

void b() throws 예외 클래스 타입{
	// 예외 가능블록
}

b()가 자신을 호출한 a()에 예외를 전가했을 때

 

b()메서드가 예외를 처리하지 않고 자신을 호출한 메서드로 예외를 전가하고 있다.

예외를 전가받은 a()메서드는 전가된 예외를 처리할 의무를 갖는다.

b()메서드에서 호출한 a()메서드에서 b()가 전가한 예외 클래스 타입에 대해 예외 처리 구문을 작성해야 한다.

 

아래는 직접 예외 처리를 할 때와 호출메서드로 예외를 전가할 때 예시를 나타낸 것이다.

class A{
    void aaa(){
        bbb();
    }
    void bbb(){
        try{
            Thread.sleep(1000);
        }catch (InterruptedException e) {
            // 예외 처리 구문
        }
    }
}

// 예외를 호출 메서드로 전가할 때
class B{
    void aaa(){
        try{
            bbb();
        }catch (InterruptedException e){
            //예외 처리구문
        }
    }
    void bbb() throws InterruptedException{
        Thread.sleep(1000);
    }
}

 

예외를 처리할 때와 마찬가지로 메서드에서 발생할 수 있는 예외가 여러 종류일 때 여러개의 예외를 한 번에 전가할 수 있다.

 

다중 예외 전가 구조

리턴 아입 메서드명(입력매개변수) throws 예외클래스 A, 예외클래스 B ... {
	//여러개의 예외 종류가 발생 할 수 있는 블록
}

 

EX)

void aaa(){
	try{
		bbb();
    } catch (예외클래스A | 예외클래스B e) {
    	//예외처리
    }
}
void bbb() throw 예외클래스A, 예외클래스B {
	//예외발생가능블록
}

 

예외 한꺼번에 전가하기 예제

// 하위 메서드에서 직접 예외를 처리할 때
class A{
    void aaa(){
        bbb();
    }
    void bbb(){
        try{
            Class cls = Class.forName("java.lang.Object");
            Thread.sleep(1000);
        } catch (InterruptedException | ClassNotFoundException e){
            // 예외 처리 구문
        }
    }
}

//예외를 호출 메서드로 전가할 때
class B{
    void aaa(){
        try{
            bbb();
        } catch (InterruptedException |ClassNotFoundException e){
            // 예외 처리 구문
        }
    }
    void bbb() throws InterruptedException, ClassNotFoundException{
        Class cls = Class.forName("java.lang.Object");
    }
}

'Language > Java' 카테고리의 다른 글

[Java] 쓰레드의 속성  (0) 2022.04.05
[Java] 쓰레드, 멀티쓰레드  (0) 2022.04.05
[Java] 리소스 자동 해제 예외 처리  (0) 2022.04.04
[Java] 예외 처리  (0) 2022.04.04
[Java] 이너 인터페이스  (0) 2022.04.03
  1. throws
'Language/Java' 카테고리의 다른 글
  • [Java] 쓰레드의 속성
  • [Java] 쓰레드, 멀티쓰레드
  • [Java] 리소스 자동 해제 예외 처리
  • [Java] 예외 처리
White Han
White Han
Software Developer
White Han
sudo apt-get happiness
White Han
전체
오늘
어제
  • 분류 전체보기 (183)
    • Language (35)
      • Java (17)
      • Java-Weekly-study (0)
      • Python (18)
    • BackEnd (11)
      • Server (2)
      • Spring (3)
      • Spring Security (0)
      • JDBC (1)
      • NodeJS (2)
      • LINUX (3)
    • DataBase (10)
      • MySQL (5)
      • MongoDB (4)
      • Oracle (1)
    • Infra (4)
      • Docker (4)
    • CS (38)
      • OS (38)
    • Problem Solving (79)
      • Algorithm (8)
      • CT-Java (30)
      • CT-Python (41)
    • IDE (1)
      • eclipse (1)
      • vscode (0)
    • Etc. (3)
      • Git (1)
      • TDD, Refactor, CleanCode (1)
      • Conference (1)
    • 기록 (2)
      • 후기 (1)
      • 프로젝트 회고록 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

  • 방문해 주셔서 감사합니다.

인기 글

태그

  • 싸피8기
  • 싸피
  • 프로세서
  • 자바 inheritance
  • Java Inheritance
  • 자바스크립트
  • javascript identifier
  • 자바 super
  • java
  • AOC 24B1X
  • OS
  • 사무용 모니터 추천
  • 24인치 모니터 추천
  • Java super
  • SSAFY
  • 알파스캔 모니터
  • 운영체제
  • javascript
  • 자바스크립스 식별자 종류
  • 운영체제 역할
  • 사무용 모니터
  • 운영체제 구조
  • 자바스크립트 개념
  • Java this
  • 싸피 합격
  • 싸피 후기
  • 알파스캔 AOC 24B1X
  • 프로세스
  • 자바 this
  • 자바스크립트 식별자

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
White Han
[Java] 예외 전가 (throws)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.