본문 바로가기
TIL : JAVA

[Java] ResponseEntity 를 return할 때, new를 언제 붙이는가?

by 이페코장인 2024. 5. 9.

ResponseEntity란?

ResponseEntity<T>는 HttpEntity<T>를 상속받고 있어, HttpEntity에다 HttpStatusCode를 추가한 클래스이다. HttpEntity는 HTTP 요청 또는 응답 entity인데, header와 body로 구성되어 있다. ResponseEntity class 문서에서 생성자는 다음과 같다.

public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatusCode statusCode) {
    super(body, headers);
    Assert.notNull(statusCode, "HttpStatusCode must not be null");

    this.status = statusCode;
}

 

정리하자면, ResponseEntity에 총 3가지 인자(정보)가 담길 수 있다.

  1. body : json, html 등의 구체적인 데이터를 담는 곳
  2. header :  요청에 대한 접속 운영체제, 인증 정보 등의 부가 정보를 담는 곳
  3. HttpStatusCode : HTTP 응답 상태 코드를 알려줄 데이터를 담는 곳

 

RestController에서 ResponseEntity 사용

Spring Boot 프로젝트에서 RestController를 통해 API를 구성할 때, ResponseEntity로 응답을 return하여 정보를 보내게 된다. 그런데 return이랑 ResponseEntity를 같이 사용할 때, new를 붙이는 경우와 붙이지 않는 경우가 있다.

// Case 1
public ResponseEntity<ApiResponseMessage> helloWorld() {
    ApiResponseMessage message = new ApiResponseMessage("Success", "Hello, World", "", "");
    return new ResponseEntity<ApiResponseMessage>(message, HttpStatus.OK);
}

// Case 2
public ResponseEntity<ApiResponseMessage> helloWorld() {
    ApiResponseMessage message = new ApiResponseMessage("Success", "Hello, World", "", "");
    return ResponseEntity.status(HttpStatus.OK).body(message);
}

 

두 case 모두 똑같은 역할을 하는 코드지만, case 1에는 new가 있고, case 2는 new가 없다. 이는 두 코드에서 약간 다른 방식으로 return하고 있기 때문이다.

 

case 1

ResponseEntity에 인자를 담아 바로 return한다. ResponseEntity 자체는 일반적인 class이므로, 객체를 만들기 위해 new로 class의 인스턴스화가 필요하다.

 

case 2

ResponseEntity.status()를 return한다. status()는 공식문서에

public static ResponseEntity.BodyBuilder status(HttpStatusCode status)

라고 되어 있는데, static 으로 정의돼 있다. 정적 메서드는 인스턴스가 아닌 클래스에 관계된 것이기 때문에 인스턴스를 생성하지 않고 사용한다. 즉, new를 붙이지 않는다.

'TIL : JAVA' 카테고리의 다른 글

[Java] Long과 long의 차이  (0) 2024.09.15
[Java] 선형 검색 Linear Search  (0) 2024.05.02
[Java] Static, Heap, Stack 메모리  (0) 2024.04.25
JDBC 로 MySQL 연결하기  (0) 2024.03.30
JDBC 기초  (0) 2024.03.28