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

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

  • 함수형과 객체지향은 아래와 같은 특징을 가지고 있다.

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


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


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

  • 우리가 서울역에서 부산역을 가려고 합니다.
  • 요즘에는 지도앱이 잘 되있어서 길찾기를 이용하죠!
  • 만약 길을 찾는다고 했을 때, 길을 어떻게 가야할까요?

||함수형|객체지향|
|---|---|---|
|가정|- 부산역으로 가는 경로를 이미 알고 있다. | - 부산역으로 가는 정보가 없다.|
|로직| - 부산역은 부산광역시 초량동에 위치해 있다.|- 서울역 버스 환승센터로 간다.
- 406버스를 타고 23분 이동한다.
- 서울 고속버스터미널에선 내린다.
- 서울고속버스터미널에서 4시간 20분 동안 이동한다. 등등..|
|예시|||

  • 표를 보면 알 수 있듯이 함수형어떻게 가는지보다 어디(what)에 도착하는지만 중요합니다.
  • 하지만 객체지향어떻게 가는지(HOW)에 대한 상세한 정보가 필요합니다.

  • 또 다른 예시로 자동차를 들어봅시다!
  • 자동차에 기어를 넣는 방식은 오토스틱방식이 있는데요
  • 이 두 함수들은 기어를 바꿀 때 어떻게 할까요?

||함수형|객체지향|
|---|---|---|
|방식|- 오토 방식으로 기어 변속을 한다.| - 스틱 방식으로 기어 변속을 한다.|
|예시|||


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


(3) 홀수 n개 더하기

A. 객체지향 프로그래밍

  • 여러분들이 해당 코드 방식에 익숙하다면 코드를 보자마자 이해가 되실 겁니다.
  • 하지만 코드를 한 번도 작성해보지 않은 사람들은 이해하기가 쉽지 않죠.
  • 객체지향 함수는 어떻게 진행되는지 과정이 담겨있어 직관적으로 이해하기 어렵습니다.
  • 객체지향은 너무 상세해서,결과를 바로 보여주지 않고 과정을 다 보여줍니다.
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);
  }

B. 함수형 프로그래밍

  • 그에 반해 함수형은 결과만을 보여줍니다.
  • 만약 각 함수의 의미만 알고 있다면, 코드를 직관적으로 이해할 수 있죠^^

|함수명|설명|
|---|---|
|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^

profile
⚠ 이 블로거는 퇴근 후 극심한 피로감 + 강렬한 휴식 욕구로 인해 일주일 이상 포스팅이 없을 수 있습니다. 하지만 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글