inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 중급 1편

try-with-resources

Try-with-resources 질문

313

인프린

작성한 질문수 37

0

안녕하세요.

Try-with-resource 질문 있습니다.

강의에서는 disconnect() 메서드에서 예외가 발생하지 않도록 하여서 @Override close()에서 throws Exception 구문을 지웠는데요.

만약에 disconnect()메서드에서 예외가 발생하도록 작성했다면 close() throws Exception으로 예외를 던졌을 때 try-with-resource 쪽(호출한 쪽)에서는 sendMessage() 메서드에서 throws Exception으로 처리를 따로 해야 하나 ? 그리고 직접 예외를 잡으려면 어떻게 해야 하나요 ? 왠지 try 구문 안에서 발생한 거니 자연스레 catch 구문으로 넘어갈거 같기도 해서요. 확인 부탁드립니다.

@Override
public void close() throws Exception {
    System.out.println("NetworkClientV5.cloase");
    disconnect(); //만약 예외 발생시, try-catch로 여기서 직접 잡아주지 않으면
}
public void sendMessage(String data){
    String address = "http://example.com";
    try (NetworkClientV5 client = new NetworkClientV5(address)){ 
        client.initError(data);
        client.connect();
        client.send(data); //AutoClosable 이니 여기서 나갈 때 예외가 발생 -> 이럴 떈 sendMessage 쪽에서 sendMessage(String data) throws Exception 처리 해야 하나 ? 만약 그 에러를 직접 잡으려고 try catch 구문을 쓰려면 어떻게 해야 하나
    } catch(Exception e){
        System.out.println("예외 확인 = " + e.getMessage());
        throw e;
    }

 

java 객체지향

답변 1

1

y2gcoder

안녕하세요. 인프린님, 공식 서포터즈 y2gcoder입니다.

해당 케이스는 다음과 같이 세 가지 경우로 나눌 수 있습니다:

  1. try block 예외 O && close() 예외 X

  2. try block 예외 X && close() 예외 O

  3. try block 예외 O && close() 예외 O

첫 번째와 두 번째 경우에는 발생한 예외가 각각 try-with-resources 문의 catch 블록에서 바로 잡히게 됩니다.

세 번째 경우에는 다음과 같이 처리됩니다:

  • try 블록에서 발생한 예외는 주 예외가 됩니다.

  • close() 메서드에서 발생한 예외는 Suppressed Exception(링크) 가 되어 주 예외 안에 포함됩니다.

이렇게 억제된 예외는 Throwable.getSuppressed() 메서드를 통해 조회할 수 있습니다.

위의 링크를 클릭하셔서 개념을 참고하시고, 강의 코드를 토대로 직접 테스트 코드를 작성해보시면 더 좋은 학습이 되실 거라 생각합니다 🙂

 

감사합니다.

문제와 풀이

0

25

1

섹션 2 퀴즈 9번

0

34

2

강의노트 내용이 이해가 되지 않아서 문의드립니다.

0

48

1

중급1편, 래퍼클래스 문제와풀이2 로또제너레이터 질문

0

68

1

setVlaue질문

0

95

3

안녕하세요 코딩테스트와 병행하고 싶어서 질문드립니다.

0

95

1

findValue의 파라메터까지 래퍼클래스 배열인 이유가 있을까요?

0

76

1

아래 글처럼 toString() 강의부터 화면이 안보여요

0

99

2

TemporalAdjusters의 lastDayOfNextMonth(), lastDayOfNextYear() 메서드 지원 안함

0

84

2

오타 제보도 되나요?

0

90

2

지역 클래스 예제3 지역변수 질문

0

69

2

래퍼클래스 박싱 출력

0

60

1

자바 equals() 메소드에 대한 물리적 동일성, 논리적 동등성 질문

0

107

3

강의록 오타 제보

0

69

2

자바의 기본 클래스들에 관하여

0

71

1

실무에서 중첩(내부) 클래스 사용하나요?

0

80

1

지역 클래스 - 지역 변수 캡처3

0

55

1

12:30 의 newClassGrade 질문이 있습니다.

0

57

1

날짜와 시간 문제풀이가 막히는데

0

100

2

내부 클래스의 바깥 클래스 참조

0

68

1

스트링 풀, new String()

0

105

3

정적 중첩 클래스 사용 이유

0

97

1

status.getCode() 대신 status.code 사용

1

81

1

메서드의 지역변수명과 내부클래스의 멤버메서드에서의 지역변수명의 중복관련

0

75

1