
프로그래밍 세계에는 때때로 혼돈과 복잡성이 가득합니다. 하지만 그 속에서도 순수하고 깨끗한 오아시스 같은 존재가 있습니다. 바로 순수함수입니다. 순수함수는 혼돈 속에서 한줄기 빛같이 청정지대를 만들어냅니다. 오늘은 이 순수함수에 대해 자세히 알아보겠습니다.
"(👨🏻🏫 : 여러분, 순수함수는 정말 정말 중요해요! 리엑트 내에서의 상태관리를 잘 한다는 것은 사실상 순수성을 유지하며 상태를 잘 관리하냐의 차이점이예요. 정말 유명한 상태관리 툴인 Redux는 Flux의 아이디어를 가장 충실하게 따르지만, 차이점은, 단일 스토어를 사용하고 그 스토어를 순수 함수인 리듀서라는 상태를 업데이트합니다. 즉, 리듀서를 알기 전에 순수함수부터 알아야 한답니다!)"
순수함수는 다음 두 가지 특성을 만족하는 함수를 말한다:
"(👨🏻🏫 : 쉽게 말해서, 순수함수는 '착한 함수'예요. 항상 정직하게 같은 대답을 하고, 다른 것들을 건드리지 않죠!)"
다음은 순수함수의 간단한 예시다:
function add(a, b) {
return a + b;
}
이 함수는 항상 동일한 입력에 대해 동일한 출력을 반환하며, 외부 상태를 변경하지 않는다.
함수형 프로그래밍에서 순수함수는 핵심적인 개념이다. 이 패러다임은 순수함수를 조합하여 프로그램을 구축하는 방식을 추구한다.
함수형 프로그래밍에서는 불변성(Immutability)을 중요하게 여긴다. 순수함수는 이 불변성 원칙을 자연스럽게 따르게 된다.
"(👨🏻🏫 : 불변성이란 한 번 만들어진 데이터는 변경되지 않는다는 뜻이에요. 불변성을 지키면 상태의 변화를 추적하기 쉬워지겠죠? 이는 디버깅과 애플리케이션의 동작 예측을 용이하게 합니다. 리액트는 상태나 props의 변화를 감지하여 리렌더링을 결정합니다. 불변성을 지키면 이전 상태와 새로운 상태를 명확히 구분할 수 있어, 리액트가 변화를 정확히 감지하고 필요한 경우에만 리렌더링을 수행할 수 있답니다.)
순수함수를 사용하면 프로그램의 동작을 더 쉽게 이해하고 예측할 수 있다. 이는 전체적인 코드의 안정성을 높인다.
// 순수함수 예시 - 불변성 O
const pureIncrement = (num) => num + 1;
// 비순수함수 예시 - 불변성 X
let count = 0;
const impureIncrement = () => {
count += 1;
return count;
};
"(👨🏻🏫 : num이 바뀐다고 순수함수가 아닌 거 아냐? 라고 섣불리 판단하면 안돼요! 이 점이 매우매우 중요하답니다. impureIncrement는 이미 외부 변수 count 에 의해 영향을 받기도 하고(return), 동시에 주기도(count += 1) 합니다. 이를 보고 부수효과가 있다고 볼 수 있죠)
자바스크립트에서 순수함수의 예는 다음과 같다:
const double = (x) => x * 2;
const sum = (a, b) => a + b;
반면, 비순수함수의 예는 다음과 같다:
let total = 0;
const addToTotal = (value) => {
total += value;
return total;
};
"(👨🏻🏫 : 순수함수와 비순수함수를 구별하는 능력은 좋은 프로그래머가 되는 첫걸음이에요. 부수효과가 있는 코드는 몇 개만 쌓이더라도 예측 불가능하게 된답니다. 여러분도 연습해보세요! 다음엔
리액트에서의 순수성: 예측 가능한 UI의 비밀에 대해서 배워볼게요)"
🙇🏻 글 내에 틀린 점, 오탈자, 비판, 공감 등 모두 적어주셔도 됩니다. 감사합니다..! 🙇🏻