본문 바로가기

프로그래밍 언어/자바스크립트

함수형 프로그래밍과 JavaScript, Function 활용법

함수형 프로그래밍과 JavaScript, Function 활용법

함수형 프로그래밍은 복잡한 프로그램을 간단하고 명확하게 작성할 수 있도록 도와주는 프로그래밍 패러다임입니다. JavaScript는 함수형 프로그래밍의 다양한 기능을 활용할 수 있는 언어로, 함수형 스타일로 작성된 코드는 가독성이 높고 유지 보수가 용이합니다. 이 글에서는 JavaScript에서 함수형 프로그래밍을 구현하는 방법과 핵심 개념을 Function 활용을 통해 정리해보겠습니다.

 

 

목차

  1. 함수형 프로그래밍 개념 소개
  2. 고차 함수(Higher-Order Functions)
  3. 순수 함수(Pure Functions)
  4. 일급 함수(First-Class Functions)
  5. 불변성(Immutability)
  6. JavaScript의 함수형 도구들
  7. 결론

 

1. 함수형 프로그래밍 개념 소개

함수형 프로그래밍은 데이터를 변경하지 않고 함수만을 사용하여 문제를 해결하는 프로그래밍 방식입니다. 함수형 프로그래밍은 코드의 명확성과 재사용성을 높이며, 특히 다음과 같은 특징을 가집니다:

  • 함수 중심: 프로그램의 동작은 여러 개의 작은 함수들로 나누어 처리됩니다.
  • 상태 변경 없음: 함수는 외부 상태를 변경하지 않으며, 입력값에만 의존하여 결과를 반환합니다.
  • 순수 함수 사용: 동일한 입력값에 대해 항상 동일한 결과를 반환하는 함수를 작성하는 것이 원칙입니다.

 

 

2. 고차 함수(Higher-Order Functions)

고차 함수는 함수를 인수로 전달받거나 함수를 반환하는 함수입니다. JavaScript는 고차 함수를 적극적으로 활용할 수 있는 언어로, 함수형 프로그래밍에서 중요한 역할을 합니다. 대표적인 고차 함수는 map, filter, reduce 등이 있습니다.

예제: map 함수


    const numbers = [1, 2, 3, 4];
    const doubled = numbers.map(num => num * 2);
    console.log(doubled); // [2, 4, 6, 8]
    

위 예제에서 map 함수는 배열의 각 요소에 함수를 적용하여 새로운 배열을 반환합니다.

 

 

3. 순수 함수(Pure Functions)

순수 함수는 같은 입력값에 대해 항상 같은 출력값을 반환하며, 함수 외부의 상태를 변경하지 않는 함수입니다. 이러한 특징 덕분에 순수 함수는 테스트하기 쉽고, 유지보수가 간편합니다.

순수 함수의 특징:

  • 같은 입력값에 대해 항상 같은 결과를 반환
  • 외부 상태를 변경하지 않음
  • 부수 효과(Side Effect)가 없음

예제:


    function add(a, b) {
        return a + b;
    }
    console.log(add(2, 3)); // 5
    console.log(add(2, 3)); // 5 (항상 같은 결과)
    

위 함수는 외부 상태에 의존하지 않고, 입력값만으로 결과를 계산하는 순수 함수입니다.

 

 

4. 일급 함수(First-Class Functions)

JavaScript는 일급 객체로서 함수를 지원하는 언어입니다. 즉, 함수가 변수에 할당되거나 다른 함수의 인수로 전달되며, 반환값으로도 사용될 수 있습니다. 이러한 특징 덕분에 JavaScript에서 함수는 매우 유연하게 사용될 수 있습니다.

예제:


    const greet = function(name) {
        return 'Hello, ' + name;
    }
    console.log(greet('Alice')); // Hello, Alice

    function sayHello(fn) {
        console.log(fn('Bob'));
    }
    sayHello(greet); // Hello, Bob
    

위 예제에서 greet 함수는 변수에 할당되며, 다른 함수 sayHello의 인수로 전달됩니다.

 

 

 

 

5. 불변성(Immutability)

함수형 프로그래밍에서는 데이터를 변경하지 않고, 새로운 데이터를 생성하여 작업을 처리하는 것이 원칙입니다. 이를 불변성(Immutability)이라고 하며, 상태 변경 없이 프로그램을 작성하는 데 중요한 개념입니다.

예제: 객체 불변성


    const person = { name: 'Alice', age: 25 };
    const updatedPerson = { ...person, age: 26 };

    console.log(person); // { name: 'Alice', age: 25 }
    console.log(updatedPerson); // { name: 'Alice', age: 26 }
    

이 예제에서는 원본 객체를 변경하지 않고, 새로운 객체를 생성하여 데이터를 업데이트합니다.

 

 

6. JavaScript의 함수형 도구들

JavaScript는 함수형 프로그래밍을 쉽게 구현할 수 있도록 다양한 도구와 메서드를 제공합니다. 대표적인 함수형 도구들은 다음과 같습니다:

  • map: 배열의 각 요소에 함수를 적용하여 새로운 배열을 반환합니다.
  • filter: 조건에 맞는 요소만으로 새로운 배열을 만듭니다.
  • reduce: 배열의 각 요소를 누적하여 하나의 값으로 반환합니다.
  • forEach: 배열의 각 요소에 대해 함수를 실행하지만, 반환값을 생성하지 않습니다.

예제: reduce 함수


    const numbers = [1, 2, 3, 4];
    const sum = numbers.reduce((acc, curr) => acc + curr, 0);
    console.log(sum); // 10
    

reduce 함수는 배열의 모든 요소를 누적하여 단일 값을 반환합니다.

 

 

7. 결론

함수형 프로그래밍은 JavaScript에서 효율적이고 가독성 높은 코드를 작성하는 강력한 방법입니다. 고차 함수, 순수 함수, 일급 함수, 불변성과 같은 개념들을 이해하고 이를 적절히 활용하면 복잡한 프로그램도 쉽게 관리할 수 있습니다. JavaScript에서 제공하는 다양한 함수형 도구들을 익히고 활용해보세요. 이를 통해 더 나은 코드 품질과 유지보수성을 확보할 수 있을 것입니다.