함수형 프로그래밍

Lys·2023년 9월 4일

개발상식

목록 보기
3/15

🎶 함수형 프로그램이란?

모든 것이 순수한 수학 함수 스타일로 묶는 프로그래밍 패러다임이다.
순수 함수와 불변성을 강조하며 프로그램의 상태 변경을 최소화하는 것을 목표로 한다. 코드의 간결성으로 가독성을 높이고 모듈성 및 예측 가능성을 높일 수 있다.

프로그래밍 패러다임이란?
개발자에게 프로그래밍 관점을 갖게 하고 코드를 어떻게 작성할지 결정하는 역할을 한다.

명령형 프로그래밍과 선언형 프로그래밍

  • 명령형 프로그래밍 :무엇을 할건지 보다는 어떻게 할 건지를 설명하는 방식
    -- 1. 절차지향 프로그램밍 : 수행되어야 되는 기능을 순차적인 처리 과정으로 진행하는 방식
    -- 2. 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호 작용으로 진행하는 방식

  • 선언형 프로그래밍 : 어떻게 할 건지 보다는 무엇을 할 건지를 설명하는 방식
    -- 1.함수형 프로그램(비절차형 언어) : 순수함수를 사용하며 상태 제어보단 처리 속도가 빠른 것에 초좀을 둔 방법

함수형 프로그래밍의 특징

1.순수함수

       -  부수효과가 없는 함수       
        - 부수효과란(Side Effect)? 
           의도하지 않게 외부변수를 참조하거나 변경하는 모든 코드를 말한다.(즉 변화가 발생하는 작업)
        ✨ 변수의 값 변경 이나 객체의 필드를 저장하는 것   
        ✨ 예외나 오류 발생으로 실행 중단          
       
       -  함수의 실행이 외부에 영항을 끼치지 않는 함수
       - 동일한 인자에 대해서는 항상 동일한 값을 리턴
        
       - 모듈화 수준을 향상시켜 생산성, 안정성을 높인다
   
function add(a ,b) {
         return a + b;
         }

add(5,5) // 결과 -> 10
add(5,5) // 결과 -> 10

//이런 경우 동일한 값을 리턴하기 때문에 순수함수라고 할 수 있다.

var  c = 10;
function add2(a,b) {
          return a + b + c; 
         }

add2(5,5) // 결과 -> 20
add2(5,5) // 결과 -> 20

c=15;
add2(5,5) // 결과 -> 25

// add2의 경우에는 함수 외부에서 선언 된 변수인 c를 참조하기 때문에 순수함수라고 볼 수 없다.

  • 순수함수의 장점
    • 순수 함수를 사용하면 다른 함수에 미치는 영향을 최소화 할 수 있다
    • 테스트와 디버깅이 쉽다.(프로그램의 변화 없이 결과를 예상할 수 있기 때문에)

2. 참조 투명성

  • 함수가 함수 외부의 영향을 받지 않는다.
  • 기존의 값이 변경되지 않고 유지된다(불변성)
  • 동일한 인자에 대해서는 같은 결과를 반환한다.

3.불변성

  • 데이터가 변할 수 없는 불변성 데이터이다.
  • 불편성 데이터이기 때문에 코드의 흐름을 찾기 쉽고 신뢰할 수 있는 코드가 될 수 있다.
    -데이터 변경이 필요한 경우에는 복사본을 만들어 변경한다.
var hny = "happy new year"

var slicehny = hny.slice(1,4);

console.log(hny); //happy new year
console.log(slicehny);//appy

// 새로운 문자열을 생성해 slicehny에 저장

4.1급 객체

  • 변수나 데이터에 할당할 수 있어야 한다.
  • 객체의 인자로 넘길 수 있어야 한다.
    var a; // 변수 a 선언함
    a = "apple"; // a에 데이터 할당

👍 함수형 프로그래밍의 장점

  • 불변성을 지향하기 때문에 프로그램의 동작 예측이 쉽다.
  • 코드 재사용성이 좋다.
  • 코드가 간결하여 유지보수가 쉽다.
  • 디버깅이 쉽다.(불변성 때문에)

😅 함수형 프로그래밍의 단점

  • 순수함수를 사용하는 것이 어려울 수 있다.

1개의 댓글

comment-user-thumbnail
2023년 9월 5일

안녕하세요

답글 달기