본문 바로가기

토이프로젝트 기록

Stream 과 ResponseEntity<>에 대하여

728x90

프로젝트 진행 중 Stream과 ResponseEntity<> 에 대해 알게되어 기록을 위해 포스팅한다.

 

🤔 Stream?

Stream을 파파고에 번역해보니 "흐름" 이라는 결과가 나왔다.

단어의 의미 그대로 Stream은 "요소를 순차적으로 처리할 수 있는 데이터의 흐름"이다.

배열이나 컬렉션 인스턴스에 여러 함수를 조합하여 원하는 결과를 필터링하고 가공된 결과를

얻을 수 있도록 하는 기술이며 Java 8에서 추가되었다.

 

List<ArticleResponse> articles = articleService.findAll()
    .stream()
    .map(ArticleResponse::new)
    .toList();

 

내가 작성한 코드는 다음과 같다. 각 요소가 무엇을 뜻하는지 하나하나 알아보자.

 

✅ .stream()

먼저 articleService.findAll() 이 반환하는 데이터 형식은 List<Article>이다.

하지만 나는 결과 값의 데이터 형식을 List<ArticleResponse>로 받고 싶은 것이다.

그렇기에 .stream() 메서드를 사용하여 articleService.findAll()에서 가져온 List 요소들을 순차적으로 

Stream으로 변환한다. 

 

✅.map()

.map()은 스트림 내의 각 요소를 다른 요소로 변환하는 메서드이다.

인자로 ArticleResponse 클래스를 주었으니 Article -> ArticleResponse로 변환해준다.

 

인자를 주는 방식은 Java 8에서 추가된 메서드 참조 연산자인 이중 콜론 연산자를 사용했다.

이중 콜론 연산자 사용방식

[인스턴스] :: [메서드명] or [new] 

 

ex) ArticleResponse 내에서 title을 가져오고 싶을 때

-> ArticleResponse::getTitle()

 

ex) ArticleResponse 인스턴스를 생성하고 싶을 때

-> ArticleResponse::new

 

✅.toList()

toList는 스트림의 요소들을 List로 반환하는 메서드이다.

 

 

🤔 ResponseEntity<>? HttpEntity

스프링에서 제공하는 클래스 중에 HttpEntity라는 클래스가 있다.

이는 Http 요청(request) 이나 Http 응답(response)에 해당하는 HttpHeaderHttpBody를 포함하는 클래스다.

 

 

그리고 이 HttpEntity를 상속받아 구현한 클래스가 HttpResponseHttpRequest 이다.

 

 

따라서 RequestEntityResponseEntityHttpEntity 내에 있는 HttpHeader, HttpBody

포함하고 있다.

 

ResponseEntity는 HttpRequest에 대한 응답 데이터를 포함하고 있는 클래스로 

HttpEntity를 상속하여 포함한 HttpHeader, HttpBody 외에 Http의 상태를 담는 HttpStatus가 존재한다.

 

return ResponseEntity.ok()
    .body(articles);

 

따라서 위 코드는 요청에 대한 응답으로 상태 값을 ok(200)으로 설정하고

body에 articles를 담아 반환하겠다는 의미가 된다.

728x90
반응형