TIL_019 | Trailing Lambda

묘한묘랑·2023년 12월 22일
0

TIL

목록 보기
19/31

Sprata에서 개인과제를 진행하던 도중 튜터님과 이야기를 나누게 되었는데, 그 때 코드에 대한 이야기와 더 줄일 방법에 대한 이야기를 하게 되었다.
그리고 찾게 된것이 trailing Lambda를 사용하는 방식이었다.

fun <T> responseEntity(status: HttpStatus, func: () -> T): ResponseEntity<T> {
    func.invoke().also { return ResponseEntity.status(status).body(it) }
}
// 적용 전

@PostMapping
fun createTodoBoard(@RequestBody @Valid requestTodoBoardDto: RequestTodoBoardDto): ResponseEntity<ResponseTodoBoardDto> {
        return ResponseEntity.status(HttpStatus.CREATED)
            .body(boardService.addTodoBoard(TodoBoardEntity.convertToEntity(requestTodoBoardDto)));
}


// 적용 후 

@PostMapping
fun createTodoBoard(@RequestBody @Valid requestTodoBoardDto: RequestTodoBoardDto) =
	responseEntity(HttpStatus.CREATED) {
		boardService.addTodoBoard(requestTodoBoardDto)
	}

일단 Body안에서 Service를 부르는 것부터 수정을 가하였고, 이후 ResponseEntity를 원래는 따로 createResponseEntity를 만들어서 구현을 하려 했는데 Kotlin AOP도 찾아볼겸 해서 검색을 해보니 Trailing Lambda에 관한 이야기가 나왔다.

매개변수를 runtime 시점에 받아서 넘길 수 있다는 점에서 AOP보다 더욱 유연하게 구현이 가능할 것으로 보인다.

Ref

profile
상황에 맞는 기술을 떠올리고 사용할 수 있는 개발자가 되고 싶은 개발자

0개의 댓글