결론부터 말하자면, 아니라고 생각한다.
<<쏙쏙 들어오는 함수형 코딩>>이라는 책을 읽었다.
내가 읽을 깜냥이 아니라는 걸 알았지만, 도서관에서 급하게 나서며 쓸어담느라 집으로 데려오게 되었다.
첫 장을 넘겼는데, 세상에 책 디자인이 너무 좋아서 빠져들어 읽었다. 책을 프로그램에 비유하자면, 인터페이스가 정말 깔끔하고 취향 저격이었다고나 할까. 이걸 읽고 있을 때인가 의심이 들면서도 '어, 어어..? 이해가 돼..!' 하면서 다음 걸 읽고 다음 걸 읽고 했다. 이 책에 가장 감탄하고 감사하는 것도 바로 쉽게 쓰여졌다는 이 점이다. 코드가 자바 기초 문법을 막 뗀 내가 읽어도 이해할 수 있는 정도의 수준으로 계속 쓰여있다. 읽으니 이해가 되더라는 그 놀라움과 기쁨이란.
물론 끝까지 다 읽은 것은 아니다. 아주 개괄적으로 읽었다.
그리고 배경지식 없이 처음부터 무턱대고 읽었다면 재미가 없었을 것도 같다. 나는 마침 리팩토링이나 클린 코드 방법같이, 그저 동작하도록 만드는 게 아니라 읽기도 쉽고 테스트나 유지보수도 쉬운 코드를 만들어야 한다는 니즈가 있었다. 우테코의 코딩 테스트가 그런 걸 요구한다고 귀동냥(눈동냥?)으로 들어 알고 있었기 때문에, 눈앞에 닥친 일이었던 것이다. 코드를 조립하고 쪼개고 분리하고 무슨 기법을 사용하고 무슨 원리에 입각해서 구조를 짜고... 그런 용어들이 뭘 뜻하는지 알아야 했다.
기억나는 키워드들
책에서 만나서 반가웠던 개념들과 기억해두고 나중에 더 알아볼 용어들을 짧게 적어본다.
- 함수형 프로그래밍의 핵심은 코드를 액션, 계산, 데이터로 분리하는 것이다.
- 액션은 사이드 이팩트 함수
- 계산은 순수 함수
- 데이터는 이벤트로 인해 발생한 사실
- 액션 < 계산 < 데이터 (많이 사용해야 하는 순서대로)
- 카피-온-라이트와 방어적 복사의 감격적인 포옹
- 얕은 복사와 깊은 복사
- 함수 호출 그래프로 특정 코드(함수)의 유지보수성, 테스트 가능성, 재사용성을 쉽게 파악할 수 있다.
- 계층화 패턴 네 가지: 직접 구현, 추상화 벽 외 둘
- 코드 냄새와 두 가지 리팩토링
- 일급 함수
- 콜백 = 아마도 자바에서 람다식 무명 함수?
- 함수형 도구 map(), filter(), reduce() => 오늘 자바 스트림 공부할 때 배운 거!!
- 함수형 도구 체이닝
- ...
- 타임라인 다이어그램
- ...
- 공유와 동시성
- ...
- 어니언 아키텍처
책의 말미에 얻은 화두
내가 고민한 주제는 이 책의 마지막에 나온다. 함수형 프로그래밍에 어떻게 마스터가 되는지를, 투 트랙 모델을 통해 설명하고 있다. 책에서 배운 기술을 재밌고 자유롭게 연습할 수 있는 공간인 샌드박스와, 실제 프로젝트인 제품에 적용하는 것을 동시에 진행하는 것이다. 물론 어느 정도 기술이 익어야 실제 제품에 테스트해 볼 수 있음을 전제하고 있다.
안전한 샌드박스에는 다음과 같은 것들이 있다:
- 사이드 프로젝트 : 작고 재미있는(엉뚱한) 것에서 시작해 언제든지 기능을 추가해 볼 수 있는 기반이 되는 프로젝트를 만들기까지.
- 연습 문제로 연습: 추천 사이트는 Edabit, Project Euler, CodeWars, Code Katas
- 제품 코드에서 버려진 브랜치
제품에 적용해 볼 수 있는 방법에는 다음과 같은 것들이 있다:
- 변경 가능한 전역변수를 하나씩 줄이기
- 타임라인을 하나씩 줄이기
- 액션에서 계산을 빼내기
- 암묵적 입력과 출력을 명시적으로 바꿔 보기
- 반복문을 함수형 도구로 바꿔보기
왜인지 이 부분을 읽을 때 확 느껴졌다. 내가 지금 무엇을 해야 하는지가.
- 일단 스트림을 사용하지 않고 자바 연습문제를 많이 풀어봐야 겠다. 생각을 많이 해야하는 것보다도 단순 구현 위주로, 아주 바닥부터.
- 스트림을 사용해서 다시 풀어본다.
- 생각이 필요한 문제들을 푼다.
결국 함수형 프로그래밍은 아주 당장은 적용해보지 않는 것으로 한다. 뭐라도 기본적인 프로그래밍을 짤 수 있어야 하는데 그것도 지금은 버벅거리는 상태라서, 빠르고 자유롭게 기본적인 구현을 할 수 있도록 연습하기로 한다.
지난 번에 10월 초까지 어떻게 공부해야할지를 계획한 게 있었는데,
1. 자바 기초 문법 떼기
2. 1개월 반 안에 프로그레머스 2단계까지 자바 언어로 풀 수 있도록 연습하기.
3. 우테코 프리코스에 나온 역대 미션들 풀어보고 사람들의 코드와 비교학습하기.
9월이 시작되려는 오늘, 이 중에 1번은 완료했다. 그리고 오늘 계획한 게 바로 2번에 대한 구체적인 방법 되시겠다. 복습도 잊지 말고 하도록 하자.