함수형 프로그래밍(functional programming)이란?

2020. 3. 31. 18:05·Tech Memo

면접을 보러 다니면서 함수형 프로그래밍이란 무엇인지에 대해 질문을 많이 받았다.

느낌적인 느낌이 아닌 좀 더 정확하게 알고 싶어 알아 보았다

 

함수형 프로그래밍은 무엇일까?

프로그램 패러다임의 한 종류이며, 코딩 스타일이다.

가장 중요한 것은 인풋에 대한 아웃풋이 있으면 이에 대한 데이터 흐름을 정해야 한다는 것이다

 

not functional

let name = 'Aairon'
let greeting = 'Hi, I'm '

console.log(greeting + name)

 

 

인사를 하는 문구와 이름을 넣어 콘솔에 나타나게 하는 코드이다

일종의 명령형 프로그래밍이라고 볼수있다

 

functional

function greet(name) {
  return 'Hi, I'm ' + name
}

greet('Aairon')

위의 코드를 함수형으로 표현하면 이와 같다. name을 인풋으로 받아서 아웃풋으로 나타낸다

함수형 프로그래밍의 특징 중 하나는 사이드이펙트를 피하기 위해 pure fucntion이어야한다는 것이다


pure function이란?

함수가 인풋만을 받아서 아웃풋을 계산하고 return 해야 한다

 

Not pure

let name = 'Aairon'

function greet() {
  console.log('Hi, I'm ' + name);
}

이처럼 인풋을 받지 않고 함수 밖에 있는 변수 또는 전역 변수를 사용하는 것은 pure하지 않다. 또한 return이 없는 것 또한 pure function이라고 보기 힘들다

 

pure

function greet(name) {
  return 'Hi, I'm ' + name;
}

이와 같이 아웃풋을 return하고, 아웃풋에 영향을 주는 인풋이 있어야 한다

또 다른 특징으로 higer-order function이 있다


higher-order function이란?

다른 함수를 인풋으로 받거나 함수를 아웃풋으로 return하는 것이다. 함수형 프로그래밍에서 많이 사용한다

function makeAdjectifier(adjective) {
  return function (string) {
    return adjective + ' ' + string;
  }
}

let coolifier = makeAdjectifier('cool')
coolifier('conference'); // 'cool conference'

coolifier에 makeAdjectifier의 반환되는 함수를 할당함으로써 coolifier를 실행 시 'cool conference'가 반환 되도록 하였다

 

 

출처 : https://youtu.be/e-5obm1G_FY

반응형
저작자표시 비영리 변경금지 (새창열림)

'Tech Memo' 카테고리의 다른 글

ios에서 pwa로 접속시 css 변경 / pwa로 시작되는지 감지 하는 방법  (0) 2020.08.06
webpack 간단 설명  (0) 2020.04.07
GIT refusing to merge unrelated histories 오류 해결  (0) 2020.02.10
문자 인코딩 차이점 ( EUC-KR, UTF-8)  (0) 2019.10.11
블록(Block) 요소와 인라인(inline)요소  (0) 2019.09.28
'Tech Memo' 카테고리의 다른 글
  • ios에서 pwa로 접속시 css 변경 / pwa로 시작되는지 감지 하는 방법
  • webpack 간단 설명
  • GIT refusing to merge unrelated histories 오류 해결
  • 문자 인코딩 차이점 ( EUC-KR, UTF-8)
vitnal
vitnal
4년차 프론트엔드 개발자 입니다. 이 블로그는 기록하고 싶은 내용을 저장하기 위해 사용하고 있습니다. 정제되지 않은 내용이 있을 수 있는 점 양해 부탁드립니다.
  • vitnal
    vitnal 아카이브
    vitnal
  • 전체
    오늘
    어제
    • 분류 전체보기 (154)
      • What I Read (2)
      • AI (5)
      • WEB (8)
      • React (21)
      • Nextjs (17)
      • JavaScript (16)
      • React Native (5)
      • Git (15)
      • Dev Tools (23)
      • Deploy (12)
      • Tech Memo (22)
      • Retrospect (7)
  • 반응형
  • hELLO· Designed By정상우.v4.10.5
vitnal
함수형 프로그래밍(functional programming)이란?
상단으로

티스토리툴바