쏙쏙 들어오는 함수형 코딩 (1)
2024. 04. 14
0. Intro
3월 말, 사내 프론트엔드 개발자들이 모여서 개발 관련 이야기를 하게 되는 자리가 있었습니다. 개발 관련 이야기에서 어떤 한 분은 자신이 담당하는 프로젝트에서 어떻게 고군부투 하는지에 대해 말씀 해 주셨습니다. 요새 다양한 채널에서 요구사항이 들어오다보니 다양한 변화를 어떻게 처리해야 할지, 프론트에서 코드를 어떻게 나누고 테스트를 해야 할 지 감이 안왔었다고 말씀하셨습니다.
그래서 이를 해결하기 위해 함수형 코딩 방식을 도입하기로 했고, 테스트 코드를 작성하신다고 하셨는데 이마저도 아직은 어떻게 얼마나 나눠야 할 지 고민이라고 이야기 하며 끝나는 자리가 되었습니다.
여기서 조금 신선했던게, 주로 함수형 프로그래밍
을 이야기 하는데 함수형 코딩
이라는 단어에 왠지 모르게 꽂혔습니다. 그리고 그 분이 쏙쏙 들어오는 함수형 코딩
이라는 책을 읽고, 책의 내용을 기반으로 코드 리팩토링을 진행 해 보셨다고 이야기 했습니다. 왠지 모르게 구미가 당겼습니다. 기존 함수형 프로그래밍 관련된 책은 함수형 개념이나 기법만을 이야기 했지, 이를 기반으로 프로젝트를 빌딩하고 리팩토링 하는 과정에 대해서는 이야기 해주지 않았기 때문이죠.
개발자들의 이야기가 끝나고, 저는 사무실로 복귀한 후에 바로 책을 구매했습니다. 그리고 재밌게 읽고 많은 것을 배웠기에 간단하게 서평을 작성 해 보려고 합니다.
1. 주요내용
책에서 이야기 하는 주요내용은
- 심플한 코드를 만들기 위한 패턴들
- 비동기 코드를 단순화 할 수 있는 강력한 시간 모델
- 고차 함수로 조합 가능하고 재사용 가능한 코드를 만드는 방법
이라고 합니다. 여기서 추가적으로 첨언을 하자면
- 코드를 구분하기 - 데이터, 계산, 액션
- 코드의 추상화와 추상화 레벨의 따른 리팩토링 방법
등도 배울 수 있습니다.
2. 대상독자
- 2~5년 정도 소프트웨어 개발 경험이 있는 현업 종사자
- 간단한 시스템을 만들고 있지만 큰 시스템을 다루는 것에 어려움을 느끼는 개발자
프로젝트에 참여하고 이를 유지보수, 개선해본 경험이 있는 사람이 읽기에 좋은 책 입니다. 이런 경험이 없어도 많은 도움이 되겠지만, 본인이 유사한 경험을 가지고 있다면 이전 경험 또는 현재 코드와 비교해가며 읽으면 배움이 배가 될 것이라 생각합니다.
3. 정리
함수형 프로그래밍(functional programming)
- 수학 함수를 사용하고 부수 효과(side effect)를 피하는 것이 특징인 프로그래밍 패러다임
- 부수 효과없이 순수 함수(pure function)만 사용하는 프로그래밍 스타일
부수효과란?
- 함수가 리턴값 이외에 하는 모든 일
- 메일 보내기, 전역 상태 수정
- 부수효과가 함수를 부를 때 마다 발생하기 때문에 문제가 될 수도 있다.
- 리턴값이 필요하지만 의도하지 않게 부수 효과가 발생할 수 있다.
- 대부분의 함수형 프로그래머는 불필요한 부수 효과를 가능한 사용하지 않으려고 한다.
순수 함수란?
- 인자에만 의존하고 부수 효과가 없는 함수
- 같은 인자를 넣으면 항상 같은 결과를 돌려준다.
- 수학 함수라고도 불린다
- 다루기 쉽고 이해하기 쉽다
위 내용들은 수없이 들어봤습니다. 그래서 부수 효과를 최소한으로 사용하고 순수 함수 위주로 개발하라고 합니다. 하지만 이게 말이 쉽지 “실용적으로 이를 기반으로 코드를 어떻게 작성하는게 좋은가?” 에 대한 답은 주위에서 쉽사리 찾기 어렵습니다.
함수형이라고 해봐야 제가 알던 것은 Array에서 제공 되는 몇몇 함수, 그리고 함수형 기법들 몇개만 주워듣기만 했기에 이를 실제 프로젝트에 적용하는 방법을 고민했어야 했었습니다. 그리고 가장 중요한 것은 함수형 프로그래밍에서 이야기 하는 부수 효과를 최소한으로 사용하고 순수함수만 사용하는데 왜 이런 함수형 프로그래밍을 프로젝트에 적용해야 하는가? 였습니다.
실용적인 측면에서 함수형 프로그래밍 정의의 문제점
부수효과를 사용하지 말고 순수 함수만 사용해야 한다
이 책에서 조금 힌트를 찾을 수 있었습니다.
- 부수 효과는 필요하다
- 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다.
- 함수형 프로그래밍은 실용적이다
이제 이와 관련된 내용은 학문적 지식이 아닌 기술과 개념으로 살펴볼 것이며, 함수형 프로그래머들이 중요하다고 말하는 기술인 액션, 계산, 데이터 를 구분하는 일을 배우고 익혀야 합니다.