함수형 프로그래밍이란?

2024. 1.29.

Functional Programming

INDEX

1. 함수형 프로그래밍을 공부하게 된 이유?

코드를 작성할 때, 습관적으로 작성하게 되는 패턴이 있지만 프로젝트의 규모가 커질수록 가독성이 떨어지고 일관성이 없어진다는 생각이 들었습니다. 이를 개선하기 위해서는 코드를 작성하기 전에 명확한 기준과 계획을 가지고 시작할 필요가 있다고 생각하였습니다.


그 중 함수형 프로그래밍은 코드의 가독성과 유지보수성 향상과 더불어 효율적인 상태 관리와 리액티브 프로그래밍과의 연계성 까지 있기 때문에 앞으로 프론트엔드 개발자로 성장을 해나갈 때 큰 도움이 될 것이라고 생각하였습니다.


또한 다수의 저명한 프로그래머들이 함수형 프로그래밍에 대해 평가한 문구들도 아주 매력적으로 느껴졌습니다.

“함수형 프로그래밍은 모든 것을 함수로 생각하게 만듭니다. 이것은 매우 강력한 아이디어입니다. 코드를 작성하는 새로운 방법을 제공하고, 프로그래밍에 대한 근본적인 사고방식을 바꿀 수 있습니다.” - Simon Peyton Jones


“함수형 프로그래밍은 당신이 문제를 어떻게 해결할 것인가가 아니라 무엇을 해결할 것인가에 집중하게 만듭니다. 이는 추상화와 코드의 명확성을 증가시킵니다.” - Robert C. Martin


그렇다면 함수형 프로그래밍이란 무엇일까요?


2. 함수형 프로그래밍이란?

함수형 프로그래밍은 마치 수학 함수와 같이 동작하는 코드를 만드는 프로그래밍 방식입니다.

특히 부수 효과(side effect)를 최소화하고, 순수 함수(pure function)를 중심으로 코드를 구성하는 것을 강조합니다.

함수형 프로그래밍을 통해 코드의 품질을 향상시키고, 유지보수를 용이하게 할 수 있습니다. 복잡한 시스템을 다루는 경우, 함수형 프로그래밍 패러다임이 큰 도움이 될 수 있습니다.

이제 이 개념들을 좀 더 쉽게 이해할 수 있도록 간략히 소개해보겠습니다.


3. 함수형 프로그래밍의 핵심

순수 함수(pure function) 사용

입력에만 의존하여, 동일한 입력에 대해 항상 같은 결과를 반환합니다.

function sum(a: number, b: number): number {
    return a + b;
}

console.log(sum(3, 4)); // 항상 7을 반환


부수 효과(side effect) 최소화

함수가 결과값 외에 다른 일을 하는 것을 최대한 피합니다.
예를 들어, 파일 읽기나 이메일 보내기와 같은 행위는 부수 효과에 해당합니다.

let count: number = 0;
function increment(): void {
    count += 1;
}

increment();
console.log(count); // count는 함수 외부 상태에 의존하며, 함수 호출 결과로 외부 상태가 변경됩니다.

4. 실용적인 측면의 고려사항

부수 효과의 필요성

실제 프로그래밍에서 부수 효과 없이는 작업이 어렵습니다. 파일을 읽고 쓰거나, 네트워크 요청을 보내는 등의 작업이 필요합니다.

import * as fs from 'fs';

function writeFile(filename: string, content: string): void {
    fs.writeFileSync(filename, content);
}

writeFile('test.txt', 'Hello, World!'); // 파일 시스템에 'test.txt' 파일을 생성하며 내용을 씁니다.

부수 효과 관리

함수형 프로그래밍에서는 부수 효과를 다루는 방법이 존재하며, 이를 통해 실용적인 프로그래밍이 가능합니다.


5. 액션, 계산, 데이터의 구분

액션

시점과 횟수에 의존하는 작업입니다.
예를 들어, 사용자의 입력 처리나 네트워크 요청 등이 액션에 해당합니다.

function changeBackgroundColor(color: string): void {
    document.body.style.backgroundColor = color;
}

changeBackgroundColor('blue'); // 웹 페이지의 배경색을 파란색으로 변경합니다.

계산

입력만으로 결과를 낼 수 있는 순수한 작업입니다.
계산은 부수 효과가 없고, 동일한 입력에 대해 항상 동일한 결과를 반환합니다.

function getStringLength(string: string): number {
    return string.length;
}

console.log(getStringLength('Hello, World!')); // 13을 반환

데이터

정보 그 자체입니다. 데이터는 변하지 않으며, 액션과 계산의 대상이 됩니다.

interface User {
    name: string;
    age: number;
}

const user: User = {
    name: 'Munseok',
    age: 20
};

console.log(user.name); // 'Munseok'

6. 함수형 프로그래밍의 장점

예측 가능성

순수 함수를 사용함으로써 코드의 동작을 예측하기 쉽습니다.

모듈성

코드를 잘게 나누어 관리하기 쉽습니다.

재사용성

순수 함수는 다양한 상황에서 재사용할 수 있습니다.


7. 함수형 프로그래밍의 적용

분산 시스템

함수형 프로그래밍은 메시지 순서가 바뀌거나, 중복되거나, 유실될 수 있는 분산 시스템에서 특히 유용합니다.

액션의 관리

코드에서 잘 관리해야 할 부분을 명확히 하여, 시스템의 안정성을 높입니다.


참고자료

유인동, ⌜함수형 자바스크립트 프로그래밍⌟, 프로그래밍인사이트, 2017
에릭 노먼드, ⌜쏙쏙 들어오는 함수형 코딩⌟, 제이펍, 김은민 옮김, 2022