Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[recap] 명령형 데이터 처리의 리팩터링 #52

Open
jwnnoh opened this issue Jul 13, 2024 · 0 comments
Open

[recap] 명령형 데이터 처리의 리팩터링 #52

jwnnoh opened this issue Jul 13, 2024 · 0 comments
Assignees
Labels
ch9 9챕터 내용을 학습합니다 recap 학습에 관한 회고입니다.

Comments

@jwnnoh
Copy link
Member

jwnnoh commented Jul 13, 2024

무엇을 알게 되었나요?

  • 해당 주차는 본인이 실제로 작성한 코드를 기반으로 책에서 배운 내용을 기반으로 해결해보겠습니다 :)

기존 코드

List<Menu> menus = new ArrayList<>();
                request.menuRequests().stream()
                .map(menuRequest ->
                        Menu.create(pub, menuRequest.menuName(), menuRequest.price(), menuRequest.oneLiner()))
                .map(menuRepository::save)
                .menus.add(menu);

이를 어떻게 하면 직접적으로 기술할 수 있을까?

List<Menu> menus = request.menuRequests().stream()
    .map(menuRequest -> Menu.create(pub, menuRequest.menuName(), menuRequest.price(), menuRequest.oneLiner()))
    .map(menuRepository::save)
    .collect(Collectors.toList());

해당 방식으로 개선할 수 있지 않을까? 코드의 흐름을 보다 직접적으로 표현할 수 있어진 것 같다.. 가독성도 조금 오른 것 같기도 하고..?

어려운 내용이 있었다면 이를 어떻게 해결하였나요?

toList()

개선된 코드에서 toList()로 스트림 API를 반환할 경우 불변한 List 객체가 반환되기 때문에, 컴파일시에는 문제가 생기지 않지만 런타임시 오류가 생긴다.

왜일까? 아마도 불변한 객체를 도메인에 추가하는 과정에서 오류가 생기는 것이 아닐까..
시스템 상에서 리스트를 변형하려는 의도가 있었나보다..

해결방법

간단했다. toList()collect(Collectors.toList())로, 즉 수정 가능한 List를 반환하도록 하여 오류를 해결할 수 있었다!^_^

어떤 자료를 참고하였나요?

  • Thans to.. ChatGPT4o
@jwnnoh jwnnoh added recap 학습에 관한 회고입니다. ch9 9챕터 내용을 학습합니다 labels Jul 13, 2024
@jwnnoh jwnnoh self-assigned this Jul 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ch9 9챕터 내용을 학습합니다 recap 학습에 관한 회고입니다.
Projects
None yet
Development

No branches or pull requests

1 participant