개발 기술/함수형 프로그래밍

함수형 프로그래밍이란?

by GicoMomg (Lux) 2021. 9. 26.

1 함수형 프로그래밍이란?

1) 함수형 프로그래밍 vs 객체지향 프로그래밍

  • 함수형과 객체지향은 아래와 같은 특징을 가지고 있다.
함수형 객체지향
패러다임 선언형 명령형(또 다른 예로 절차지향언어도 포함)
요약 무엇을 처리할 것인가 어떻게 처리할 것인가
특징 - 받은 인자만으로 결과물을 내어야 함
- 원본 데이터는 불변해야함
- 우리가 자주 사용하는 방법
- 로직을 상태와 행위로 이루어진 객체로 만듬
- 이 객체들을 조립해서 하나의 프로그램을 만드는 것
- 객체를 만드는 것
필요성 - 동시성 작업을 안전하게 하고 싶을 때
- 원본 데이터를 손상시키면 안 될 때
- 라이브러리를 만들 때
- 객체를 만들어야 할 때
- 일반적으로 이 방법을 많이 씀

저 표의 내용들이 전부 다 이해되시나요?전 안 됩니다 ^^ 더 이해가 쉽게 알아볼까요?


2) 함수형, 객체지향 차이를 자세히 알아보자.

  • 우리가 서울역에서 부산역을 가려고 합니다.
  • 요즘에는 지도앱이 잘 되있어서 길찾기를 이용하죠!
  • 만약 길을 찾는다고 했을 때, 길을 어떻게 가야할까요?
함수형 객체지향
가정 - 부산역으로 가는 경로를 이미 알고 있다. - 부산역으로 가는 정보가 없다.
로직 - 부산역은 부산광역시 초량동에 위치해 있다. - 서울역 버스 환승센터로 간다.
- 406버스를 타고 23분 이동한다.
- 서울 고속버스터미널에선 내린다.
- 서울고속버스터미널에서 4시간 20분 동안 이동한다. 등등..
예시
  • 표를 보면 알 수 있듯이 함수형어떻게 가는지보다 어디(what)에 도착하는지만 중요합니다.
  • 하지만 객체지향어떻게 가는지(HOW)에 대한 상세한 정보가 필요합니다.

  • 또 다른 예시로 자동차를 들어봅시다!
  • 자동차에 기어를 넣는 방식은 오토스틱방식이 있는데요
  • 이 두 함수들은 기어를 바꿀 때 어떻게 할까요?
함수형 객체지향
방식 - 오토 방식으로 기어 변속을 한다. - 스틱 방식으로 기어 변속을 한다.
예시

또 하나의 예시로 코드를 볼까요?


3) 홀수 n개 더하기

(1) 객체지향 프로그래밍

  • 여러분들이 해당 코드 방식에 익숙하다면 코드를 보자마자 이해가 되실 겁니다.
  • 하지만 코드를 한 번도 작성해보지 않은 사람들은 이해하기가 쉽지 않죠.
  • 객체지향 함수는 어떻게 진행되는지 과정이 담겨있어 직관적으로 이해하기 어렵습니다.
  • 객체지향은 너무 상세해서,결과를 바로 보여주지 않고 과정을 다 보여줍니다.
function f1(limit, list) {
    let result = 0;           //1. 결과값을 담는 변수
    for(const a of list) {    //2. 반복문을 돌린다.
      if (a%2) {              //3. 만약 홀수라면
        const b = a*a;        //4. 이 값을 제곱하고
        result += b;          //5. 더한다
        if (--limit === 0) break;  //6. 단, limit번 숫자까지만 더한다.
      }
    }
    console.log(result);
  }

(2) 함수형 프로그래밍

  • 그에 반해 함수형은 결과만을 보여줍니다.
  • 만약 각 함수의 의미만 알고 있다면, 코드를 직관적으로 이해할 수 있죠^^
함수명 설명
go 인자를 받아 결과를 바로 산출
함수별 자세한 설명은 다음장에서 진행 >_0
filter 조건에 해당하는 원소만 취함
map 특정 원소를 변형하여 사용함
take(limit, arr) limit개의 원소만 이용
reduce(acc, a) 원소를 더한 값을 나타냄
function f7(limit, list) {
    _.go(
      list,
      L.filter(a => a%2), // if === filter
      L.map(a => a*a),    // 연산한 값을 사용할 때 === map
      L.take(limit),      //시간복잡도 줄일 때
      _.reduce(add),      //모든 값들을 더할 때
      console.log);
  }

대충 함수형에 대해 알았겠다! 다음장에서는 명령형을 함수형으로 바꾸어봅시다!


출처

너무 잘 설명된 사이트들, 구경하러 가세요 ^0^

반응형

댓글