[스터디 회고] 쏙쏙 들어오는 함수형 코딩
들어가며
에릭 노먼드의 쏙쏙 들어오는 함수형 코딩으로 책 스터디를 진행했고 각자 분량을 읽고와서 해당 내용에 대해서 의견을 나누는식으로 스터디는 진행 되었다.
이번 스터디를 통해 함수형 프로그래밍이 단순히 새로운 패러다임을 익히는 것이 아니라, 실제 실무에서 즉각적으로 적용할 수 있는 구체적이고 현실적인 기술을 배우는 과정이었다는 것을 느꼈다.
극적인 변화보다는 내가 사용할수있는 개발 도구 상자에 유용한 도구들이 하나씩 추가되는 느낌이었고, 이러한 점이 오히려 실용적이고 지속 가능한 학습 방법이었다.
액션(Action), 계산(Calculation), 데이터(Data) - 코드를 보는 새로운 시각
액션(Action) - 부수 효과가 있는 함수들
단순한 함수 호출로만 생각했던 것들이 실제로는 명확히 다른 성격을 가지고 있다는 것을 알게 되었다.
- 네트워크 요청, 파일 쓰기, 현재 시간 조회와 같은 작업들
- 언제 실행하느냐, 몇 번 실행하느냐에 따라 결과가 달라지는 작업들
- 외부 환경과 상호작용하는 모든 작업들
이전에는 이런 작업을 그저 필요한 기능이라고만 여겼지만, 이제는 조심스럽게 다뤄야 하는 액션으로 인식하게 되었다. 특히 액션을 코드의 가장자리로 밀어내고, 핵심 로직은 순수 계산으로 처리하려고 신경쓰고 있다.
계산(Calculation) - 순수함수의 힘
이전 방식:
function calculateTotalPrice(items) {
let total = 0;
const currentTime = new Date(); // 액션!
items.forEach(item => {
total += item.price;
console.log(`Processing ${item.name}`); // 액션!
});
return total;
}
개선된 방식:
function calculateTotalPrice(items) {
return items.reduce((total, item) => total + item.price, 0);
}
계산의 특성인 같은 입력에 대해 항상 같은 출력을 보장하면서, 테스트 작성이 쉬워졌음을 체감했다. 더 중요한 것은 코드를 읽으면서도 이 함수는 안전하다 라는 확신을 얻을 수 있었다는 점이다.
데이터(Data) - 불변성의 실용적 가치
데이터의 불변성이 이론적 개념이 아니라 실제로 버그를 방지하고 코드를 더욱 안정적으로 만드는 실용적 도구임을 깨달았다.
const updateUserPreferences = (user, newPreferences) => ({
...user,
preferences: { ...user.preferences, ...newPreferences }
});
순수함수에 대한 새로운 인사이트 ✨ ⭐
1. 순수함수는 신뢰할 수 있는 함수
기존에는 순수함수를 단지 "부수 효과가 없는 함수"라는 기술적 정의로만 이해했다. 하지만 이제는 "언제 어디서 호출해도 안전한 함수"라는 실용적 관점으로 보게 되었으며, 이는 코드 리뷰나 리팩토링을 할 때 매우 큰 장점으로 다가왔다.
2. 조합 가능성(Composability)의 실제 의미
const addTax = (price) => price * 1.1;
const applyDiscount = (price, discount) => price * (1 - discount);
const formatCurrency = (amount) => `$${amount.toFixed(2)}`;
const calculateFinalPrice = (originalPrice, discount) =>
formatCurrency(addTax(applyDiscount(originalPrice, discount)));
각 함수가 순수하기 때문에 레고 블록처럼 자유롭게 조합할 수 있었고, 이것이 진정한 함수형 프로그래밍의 힘이라는 것을 깨달았다.
3. 테스트와 디버깅의 단순성
순수함수는 테스트와 디버깅이 매우 간단하다. 별도의 복잡한 설정 없이, 입력과 출력만 확인하면 된다. 이 간편함이 생산성을 크게 높여준다는 것을 직접 체감했다.
마무리
스터디를 진행하면서 한 분이 이런 말씀을 해주셨다.
이거 그냥 대단한 걸 배우고 있는 게 아니라, 그냥 우리 주머니에 도구가 하나 늘어난 거고 우리는 선택할 수 있는 선택지가 하나 늘어나는 것 같다.
이 말에 정말 깊이 공감했다. 함수형 프로그래밍을 배우면서 느꼈던 것도 정확히 그런 것이었다. 기존의 개발 방식을 완전히 바꿔야 한다는 부담감이 아니라, 상황에 따라 꺼내 쓸 수 있는 새로운 도구들을 얻었다는 안정감이었다.
예를 들어, 복잡한 상태 변화가 필요한 상황에서는 "이 부분을 순수함수로 분리할 수 있을까?", "액션과 계산을 구분해서 테스트하기 쉽게 만들 수 있을까?" 같은 선택지가 생겼다. 무조건 함수형으로 작성해야 한다는 강박이 아니라, 더 나은 코드를 위한 옵션이 늘어났다는 것이 핵심이다.
이번 스터디를 통해 함수형 프로그래밍이 거창한 패러다임 변화가 아니라, 더 나은 코드를 작성하기 위한 실용적인 기술의 집합이라는 것을 명확히 이해하게 되었다. "액션, 계산, 데이터"로 명확하게 코드를 구분하고, 순수함수의 특성을 실무에 적용함으로써 코드 품질이 좋아지고 있는것이 느껴졌다.
무엇보다 이러한 개념들이 기존의 명령형 프로그래밍을 대체하는 것이 아니라, 이를 더욱 견고하게 만들어주는 도구라는 점이 가장 큰 수확이었다. 앞으로도 이 관점을 유지하면서, 안전하고 유지보수하기 쉬운 코드를 계속 작성해 나갈 것이다.
처음 계획했던 것보다 조금 더 시간이 걸렸지만, 매주 함께 열심히 준비하고 소중한 시간을 내서 의견을 나눠주신 스터디원분들에게 정말 감사하다. 혼자 책을 읽었다면 그냥 넘어갔을 부분들도 다같이 토론하면서 더 깊이 이해할 수 있었다.
앞으로는 이 새로운 도구들을 상황에 맞게 적절히 꺼내 쓸 수 있도록 꾸준히 연습하고 준비해 나가려고 한다. 선택지가 늘어났다는 것, 그것만으로도 이번 스터디는 충분히 의미가 있었다.