일단 코드를 짤때


두괄식으로 짜게 된다.


예를 들자면


자 이 코드를 보자.

1ebec223e0dc2bae61abe9b304de2902836605a8037b9fd215302732fd0442e0ed6e4e1859d0a6cf914891af97c307a5da513c

인턴의 코드를 수정해주면서 짠 코드인데


대충


result 를 fetch 해오는데, 안에 데이터중에 null값이 있어서 set을 해주는 결과다.


인턴이 내 방식 따라한답시고 맨 바깥쪽에다가 map을 걸고선, ri -> ri 를 하고 있더라고.


내가 그래서.


인턴님, 이거는 부작용이잖아요.

일단, null을 포함시킨다음에 setter를 작동시키는 방식 자체가 부작용으로 코드를 짜겠다는 것이고 제 스타일이 아닙니다.

제 스타일이었으면 null 이 없는 타입의 DTO를 뽑아온 다음,  추가 데이터를 붙여넣는 새로운 타입의 DTO 로 매핑을 했겠죠.



일단, setter를 쓰는 방식이므로


부작용을 한번씩 실행시키기 위해 forEach를 씁시다.



그러면


forEach(ri -> ri.set(something)) 이겠네요? (실제로 코드를 이렇게 씀)


자 그러면 something이 뭐죠?


이제 문제가 좀 더 간단해졌네요


long aiRating = ??; 라고 위에 쓰고

aiRating을 구해내보죠.


계속해서

return 해야 하는 값을 쪼개나가는겁니다. 수학하듯이요.


그리고나서


자 데이터는 공간에서 공간으로 흐릅니다.


이 데이터는 어디에 저장되어있습니까?

네 데이터의 근원지가 rl 이죠?


자 그러면 점점 가공해봅시다


=> 가공 => 가공


자. 됐죠?



이런식으로 코드를 작성하면


어떤 일이 벌어지냐면




코드를 짤때 막힘없이


자꾸 등호를 쓰게 됨.



함수 중괄호를 열자마자 return 을 넣게 되고

return에서 필요한 값이 있으면 위쪽으로 빼내서 가독성을 증가시키면서 목표를 확실히하고


위쪽으로 빼낸 값은 다시 또 등호 = 를 바로 도입하면서, 어디에서 가져오죠?



또 가져올때 핵심 키워드가 되는게 있으면 앞쪽으로 빼서 등호를 적용함.



이게 뭐냐면, 결국 값에 주목하는거고 값의 흐름에 주목하는거임.



부작용을 기반으로


코드 한줄짜고, 그 다음 한줄짜고, 하나하나 데이터를 이동시켜나가는 코딩방법이 아니라



자 나는 무엇이 필요한가


등호 쓰고보고


어디에서 가져오는가


또 무엇이 필요한가


필요한 데이터가 있을때마다 위쪽에 선언하는 방식인거임.



그러다보니, 인턴이 내가 코드짜는거 첨 보고 놀랐던게


아니 뭐에요 벌써 코드 다짜셨어요? 왜 시작부터 return을 하시는거에요? 하고 놀라더라고





이게 어? 등호한번 쓰고 진짜로 완결시킬수 있어? 하고 보면 진짜로 그렇게 됨.



저기 aiRating 에 등호쓰고 결국 등호하나로 한줄코드로 마무리짓잖아.



일부러 한줄로 쓰려는게 아니라, 그냥 코드 짜다보면 자연스럽게 어쩌다보니 한줄코드가 됨.