서비스를 만들다보면 데이터를 불러오거나, 핸들링하거나 등 여러 행위를 해본 경험이 누구나 있을 것이다.
이 속에서 배우길 데이터를 탐색하려고 하면 For 문이라는 반복문을 이용한 경험이 있을 것인데, 만약 이 loop가 길어지고, 주어진 조건이 많아진다면 어떻게 해야할까?에 대한 고민을 한번쯤을 해볼법도한데...
당연히 반복문 속 내용이 많아진다면 코드의 가독성도 떨어지고, 재사용도 힘들 것이며, 아무쪼록 그냥 그닥 좋은 코드가 못될수도있다.
자바에서는 이러한 문제점을 해결하기 위해서 버전 8부터 Stream이라는 개념을 지원해준다.
평소에 나는 스트림에 대해 익숙치 못해서 For문을 이용해 루프를 탐색하곤 했는데, 당연히 코드의 가독성도 떨어지고 그냥 마음에 들지않았다..
항상 어떻게하면 이 loop를 탐색할 수 있을까?에 대한 고민과 Stream을 어떤식으로 활용해야할지 잘 몰랐기에, Stream에 대해 한번 더 공부하고자 Stream에 대해 학습했다.
학습한 내용을 정리한 링크는 다음과 같다.
2022.12.26 - [기술면접 관련 및 참고하기] - [ 10분 테코톡 ] - Stream 그리고 For Loop
이 Stream은 성능상 for문보다 좋지 않다는 점을 알고 있었다.
그러나 학습을 통해 추가적으로 왜 성능이 나오지 않는지에 대한 이슈와 그렇다고해서 무조건 for문을 쓰냐? 등 여러 측면에서 스트림의 개념에 대해 학습했다.
나 역시 스트림을 다시 학습하게 된 계기가 아래와 같다.
1) 사용자는 게시물을 작성한다.
(당연히 작성한 시점으로부터는 댓글이 존재하지 않는다.)
2) 작성에 성공하면 게시물 Data를 반환한다.
여기서 발생한 궁금증으로 인해 Stream을 학습하게 되었는데, 기존에는 BoardResponseDto를 이용해서 데이터를 Entity에서 변환해서 데이터를 전달했다. ( 이 BRD는 다른 R,U 기능에서 사용 )
당연히 게시글의 작성 시점으로부터는 댓글이 null일 수 밖에없다.
그래서 나는 그냥 위에 있는 BRD를 이용해 데이터를 반환하고 싶었고, 맺은 연관관계와 Stream을 이용해 빈 배열이라도 출력하고싶었는데, 당연히 NULLPOINTEXCEPTION이 발생했다. 이 것을 해결하고자 여러 방법을 시도해보았지만, 그 역시 실패했고, 그래서 나는 그 Steam의 내부동작에 집중하고자 했고, 그래서 Stream을 학습하게 된 것이다. Steam은 Null을 취하게 되면 NullException을 던진다는 점을 학습을 통해 알게되었다.
그래서 어떻게 하면 좋을까에 대한 고민을 많이했고, 이 고민에서 더 나아가 이 DTO를 사용하는 것이 맞냐에 대한 질문으로 확장했다.
결과적으로 이 궁금증을 해소하고자 튜터에게 질문했고, 시점의 차이였으며 내가 작성한 코드에서 조금의 수정이 있었다.
나는 그냥 어차피 null이 들어오니까 그냥 null을 반환해주면 되는 것 아니냐의 취지에서 null을 뱉어버렸고, 이러한 null을 뱉는 것은 서버단 즉 백엔드 입장에선 굉장히 무책임한 일이라고 말씀해주셨다.
그래서 그냥 게시물의 생성 시점으로부터 빈 ArrayList를 생성해주는 방식으로 서비스를 만들어 버렸다.
이렇게 Stream에 대한 궁금증이 해소되었고, 또 이 시점에 관한 질문에서 얻은 답변은 아래와 같았다.
" 다른 BoardRequestDto를 만들 것 같다"
이 역시 여러 고민과 토론 속에서 나온 하나의 의견이였지만, 나는 과연 이 데이터를 위해서 새로운 DTO를 만드는 것이 맞을까? 라는 질문을 스스로에게 던져보았는데, 이 부분 역시 튜터님이 가려운 곳을 잘 긁어 주셨다.
"DTO는 그냥 쓰다가 버린다고 생각해라"
- 이 시간을 통해 새로운 혜안을 얻게 되었다는 점
- Steam에서 시작된 영역에서 DTO까지 확장할 수 있도록 사고를 변경한 점
배움이 많았던 하루였다..
'TIL(Today I Learned)' 카테고리의 다른 글
Day.40 밀린 TIL 그리고 학습 요약 (0) | 2023.01.10 |
---|---|
Day.39 테스트 그리고 refactoring (0) | 2022.12.28 |
Day.3N 밀린 TIL (0) | 2022.12.22 |
Day.34 + 35 고민, 그리고 의미 있는 데이터란? (0) | 2022.12.16 |
Day.33 어노테이션 (0) | 2022.12.14 |