본문 바로가기
공부/Java

예외 처리 시 RETURN문 위치

by 무심한고라니 2022. 1. 17.

최근 요청받은 서버 API를 작성하다가 try-catch 구문에서 return문을 어디에 작성해야 하는지, 구체적으로는 finally에 작성해야 하는지에 대해 얘기하다 혼동이 와서 이 글을 작성하게 되었습니다.

_____

메소드 작성 시 예외 처리를 위해[1] try-catch 구문을 사용하곤 한다. 한편 리턴 타입이 void가 아니라면 값을 반환해주어야 한다. 그렇다면 return문은 어디에 작성되어야 할까? 먼저 지역변수를 사용하여 try-catch 구문 밖에 return문을 위치시키는 경우부터 코드로 확인해보았다.

 

public static void main(String[] args) {
    System.out.println(method(null));
    System.out.println("==========");
    System.out.println(method("A"));
    System.out.println("==========");
    System.out.println(method("B"));
    System.out.println("==========");
    System.out.println(method("C"));
    System.out.println("==========");
}

private static String method(String param) {
    String result = param;

    try {
        if (result == null || "B".equals(result)) {
            throw new NullPointerException();
        }

        if ("A".equals(result)) {
            return result;
        }
    } catch (NullPointerException e) {
        System.out.println("catch절");
        if ("B".equals(result)) {
            return result;
        }
    } finally {
        System.out.println("finally절");
        // return "C"; // [2]
    }

    return "C";
}

 

실행 결과는 다음과 같고, 원하는 결과가 나옴을 알 수 있다.

 

catch절
finally절
C
==========
finally절
A
==========
catch절
finally절
B
==========
finally절
C
==========

 

null을 파람으로 던지는 경우를 보면, 예외 발생 시 값을 리턴할 경우 try-catch문 밖에 리턴문을 위치시키면 됨을 알 수 있다. 반면 finally 내부에 return문을 위치시키는 경우 결과는 하단과 같다[2].

 

_____

1. 오류 코드보단 예외를 사용하라

2.

catch절
finally절
C
==========
finally절
C
==========
catch절
finally절
C
==========
finally절
C
==========

 

_____

참고

 

1. How to return a value from try, catch, and finally?

2. 메소드 내 예외처리(try-catch-finally)에서의 리턴 처리

3. 

'공부 > Java' 카테고리의 다른 글

날짜 유효성 검사  (0) 2022.01.17
출력  (0) 2021.08.13
자바 다형성  (0) 2020.12.14
자바 추상화  (0) 2020.12.14
오류 코드보다 예외를 사용하라!  (0) 2020.12.12

댓글