킹의 개발일지

쏙쏙 들어오는 함수형 코딩 (1 ~ 5일차) 본문

독서/책너두 챌린지

쏙쏙 들어오는 함수형 코딩 (1 ~ 5일차)

k1ng 2023. 9. 7. 02:32

시작하기 앞서..

챌린지는 8월 초부터 시작했는데, 리뷰를 메모장에 따로 저장해 왔었다. 때문에 이전에 썼던 리뷰들은 몇 개씩 묶어서 포스팅 할 예정이다.

 

진짜 시작~!


1일차

챌린지 시작

함수형 코딩이 유행하는 시절, 그것이 뭔지 유튜브로 잠깐 보았었다. 그때 당시 흥미가 잠깐 있었지만, 그저 새로 생긴 프로그래밍 기법이니 하면서 넘겼었던 기억이 난다. 책너두에서 이에 대한 책이 있어 꾸준한 독서 습관도 기를겸 골라보게 됐다.

<쏙쏙 들어오는 함수형 코딩> 심플한 코드로 복잡한 소프트웨어 길들이기,


주 제목 보다 부제목에 먼저 눈길이 갔다. 함수형 코딩이 잘 몰랐기에, '심플한 코드로 복잡한 소프트 웨어 ...' 이 한 줄이, 복잡성에 해매다 찾은 오아시스마냥 눈이 끌리게 됐다. 안 그래도 개인 프로젝트를 하면서 간단한 로직의 컴포넌트임에도 가독성이 떨어지고 복잡해지자, 이것을 돌파할 돌파구가 필요함을 느끼고 있었다.

 
이 책을 바이블 마냥 1:1로 대응시켜 프로젝트에 적용할 순 없겠지만, 코드를 작성할 때 나의 무지성 코딩에 약간의 '지성'을 넣어 줄 조미료로 여기며, 꾸준히 읽어 완독할 계획이다. 

 


2일차

<함수형 프로그래머는 부를 떄 조심해야 하는 코드를 구분합니다.> 액션, 계산, 데이터

저자는 별표까지 쳐가며 액션, 계산, 데이터 이 세가지를 구분하는 것을 강조하는데, 이를 함수형 프로그램밍의 기본 개념이라 설명한다. 그리고 이 세가지의 관계를 함수형 프로그래밍에서 액션 < 계산 < 데이터 순으로 중요도(?)를 언급한다. 


세가지를 구분하는 법을 설명할 때, 개인적으로 진행하고 있는 프로젝트와도 연관 시킬 수 있었는데, 저자가 말하고자 하는 바가 일대일로 매칭 되자 함수형 프로그래밍 기법에 대한 신뢰도가 올라갔다. 실제로 플젝을 진행하면서 액션보단 계산이, 계산보단 데이터가 다루기 쉬웠고, 복잡성도 낮았기 때문이다.


도입부만 읽었지만, 함수형 프로그래밍 기법이 내가 직면한 복잡성을 낮출 수 있을거란 기대감이 생기기 시작했다. 특히 저자가 기존에 출판 됐던 다른 책들과 비교하며, 이론적인 면 보다는 실용적인 면에 집중했다고 하는데, 첫 도입부에서 부수효과, 순수함수 ... 등을 설명할 때 이 부분에 공감할 수 있었다. 만약 저자가 계속해서 순수함수는 무엇이고 부수효과는 무엇인데... 이렇게 책을 써나갔다면 금방 흥미를 잃었을 것이다.

흥미를 잃지 않고 끝까지 책을 완독해, 내 코드에 만연하고 있는 복잡성을 줄일수 있기를 기대한다. (어차피 책을 읽고 받아들이는건 나지만... 누가 해주겠니 ㅠ)


3일차

<타임라인 커팅 서로를 기다릴 수 있게 하기> 토니네 가게는 스레드로 피자를 만든다.

이번 스케쥴의 내용은 토니네 피자가게를 예로 들면서 이전 파트에서 개념적으로 설명했던 내용의 떡밥을 회수 한다. 나의 부족이듯 하지만 아직 내용이 추상적이다. 액션, 계산, 데이터의 분리가 쉬이 받아 들이기가 힘들다. 타 코드와 데이터 간의 구분은 쉽지만 액션과 계산간의 구분이 쉽지 않다. 허나 책을 읽다보면 해결 될 일이라 생각한다. 

저자는 타임 다이어 그램을 사용하면서 토니네 피자가게 시스템을 시각화 한다. 이는 시스템의 흐름을 쉽게 보여준다. 덕분에, 처음 토니가 세 로봇에 적용한 만든 시스템이 정상적으로 작동하지 않을 것이란게 눈에 보였다.

 

타임라인 다이어그램이 시스템의 문제를 발견하는데 좋은 도구로 보였다. 로봇의 문제점을 타임라인 커팅이라는 기법으로 해결하는데, 딱 이놈이 동작하는게 OS시간에 배운 wait와 닮아 있다. (한 스레드가 다른 스레드의 동작 완료를 기다리는 것처럼...)

지금까진 저자가 뒤 설명할 내용의 맛보기만 보여준다. 토니네 가게를 예를 들어 설명을 하지만 '아 토니는 피자를 저렇게 만드네...' 라고 느껴질 뿐이었다. 때문에 저자가 피자까지 만들면서 설명하고자 하는 함수형 코딩의 정수를 어서 빨리 느껴보고 싶은 대목이었다.


4일차

<새로 만드는 코드에 함수형 사고 적용하기> '데이터는 이벤트에 대한 사실이다.'

3일차와 비슷하게 장보기로 액션, 계산, 데이터를 나누는 예시를 준다. 여전히 추상적이다.. '운전해서 상점으로 가기'에 자신만만히 '계산!' 했지만,.. 땡! 답은 액션이었다. 직접 코드에 접목 시키기 전에 맞는 예방주사라 생각한다.

 

이후 데이터에 대해서 설명을 해주는데, 확실히 '재고목록', '필요한 재고' 이런것 보단 json바이트 등이라 말하니 더 알기 쉬웠다.


뒤이어, 쿠폰독의 새로운 마케팅 전략이라면서 연습문제도 내주는데, 얼추 맞추긴 했으나, '쿠폰에 등급 매기기' 가 데이터(이름부터 동사인데?..)라는 것에 번역이 잘못 됐나 생각이 들었다. 쿠폰 데이터 베이스 테이블을 조회해서 쿠폰을 입력하면 그에 맞는 랭크를 돌려주면 된다 생각했었는데, 아니었나 보다.. 여튼 이번 장도 3일차와 비슷하게 갑자기 코드를 들이 대면 독자가 놀랄까 걱정된 저자의 예방 접종과 같은 파트라고 느껴졌다.


5일차

<쿠폰을 보내는 과정을 그려보기> '이제 코드로 보자'

지금껏 읽은 파트중 제일 오래 읽었다! 머리속으로 세 기준을 나누는 과정을 따라하다 보니 읽고 또 읽고 한것 같다.

 

내용은 4일차에서 이어진다. 10명이상 추천한 사용자에게는 더 좋은 쿠폰을, 나머지는 보통 쿠폰을 포함해, 이메일을 보내는 로직을 함수형 코딩으로 보여준다. 이 과정을 머릿속으로 따라 하면서 느낀 생각은 계산은 액션과 데이터 사이에서 나온다는 것이다. 계산이 유독 판단하기 어려웠는데, 코드를 통해 보면서 따라하니 명확하진 않지만 느낌적으로 알 수 있었다.

코드를 보다보니, 토이 프로젝트에서도 계산들이 있었다는게 떠올랐다. 날씨 데이터를 입력으로 받아서 그에 맞는 이미지 경로를 출력한다거나 하는 것들이 이에 포함됐다.

저자가 함수형 프로그래머는 계산을 더 좋아 한다는 점을 강조해 왔는데, 그 이유로 테스트의 용의하다는 것이 있었다. 생각보니, 실제로도 호출 시점에 영향을 받는 액션들 보다는 오직 입력에 따라 출력값 결정되는 '계산'이 테스트에 더 유용해 보였다. 

 

더 읽어봐야 현실에서 적용 가능 하겠지만, '니가 이제껏 해온게 함수형 코딩에 있는 내용들이야!' 라고 저자가 말해주는 느낌이었다.