본문 바로가기
프로그래밍

함수형 프로그래밍이란?

by YuminK 2023. 12. 12.

함수형 프로그래밍이란 무엇인가? 

함수형 프로그래밍은 대입문을 사용하지 않는 프로그래밍이며, 작은 문제를 해결하기 위한 함수를 작성한다. 함수형 프로그래밍에서는 대입문이 없기 때문에 메모리에 한 번 할당된 값은 새로운 값으로 변할 수 없다.

https://mangkyu.tistory.com/111

 

함수를 인자로 넘기는 것

일급 시민이 된다는 것은 무엇을 의미할까요?

Argument로 전달할 수 있다는 의미. -> 함수가 Argument로 전달될 수 있다.

함수의 Return값이 될 수 있다는 의미. -> Return값이 함수가 될 수 있다.

값을 수정하기도, 값을 할당할 수도 있다는 의미. -> 함수를 값처럼 할당하기도 수정도 할 수 있다.

https://nesoy.github.io/articles/2018-05/Functional-Programming

 

명령형 프로그래밍: 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 방식

절차지향 프로그래밍: 수행되어야 할 연속적인 계산 과정을 포함하는 방식 (C, C++)

객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#)

선언형 프로그래밍: 어떤 방법으로 해야 하는지(How)를 나타내기보다 무엇(What)과 같은지를 설명하는 방식

함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)

 

// 명령형

function double (arr) {

  let results = []

  for (let i = 0; i < arr.length; i++){

    results.push(arr[i] * 2)

  }

  return results

}

 

function add (arr) {

  let result = 0

  for (let i = 0; i < arr.length; i++){

    result += arr[i]

  }

  return result

}

 

$("#btn").click(function() {

  $(this).toggleClass("highlight")

  $(this).text() === 'Add Highlight'

    ? $(this).text('Remove Highlight')

    : $(this).text('Add Highlight')

})

 

// 선언형

function double (arr) {

  return arr.map((item) => item * 2)

}

 

function add (arr) {

  return arr.reduce((prev, current) => prev + current, 0)

}

 

<Btn

  onToggleHighlight={this.handleToggleHighlight}

  highlight={this.state.highlight}>

    {this.state.buttonText}

</Btn>

 

"명령형 프로그래밍은 어떻게 할 것인가(How)를 표현하고, 선언형 프로그래밍은 무엇을 할 것인가(What) 표현한다."

https://velog.io/@kyusung/함수형-프로그래밍-요약

 

객체지향과 함수형의 차이는 상태를 관리하는 점입니다. 객체지향의 경우 객체 안에 상태를 저장합니다. 그리고 해당 상태를 이용해서 제공할 수 있는 기능(메소드)를 추가하고 상태 변화를 ‘누가 어디까지 볼 수 있게 할지’를 설정하고 조정하기 위해 캡슐화, scoping, visibility 등의 기능을 사용합니다. 함수형 프로그래밍은 이런 상태를 제어하기보다는 상태를 저장하지 않고 없애는데 주력합니다. 함수라는 것 자체가 입력값이 들어가면 이에 따른 특정한 출력값이 나오는 것으로 상태를 저장하지 않습니다.

https://futurecreator.github.io/2018/10/05/why-functional-programming/

 

결국 함수형 프로그래밍이란 것은 상태를 저장하지 않고, 함수를 인자로 넣고, 함수를 반환하여 우리가 하려는 처리를 추상화하는 과정이구나. 그리고 이러한 개념을 알게 모르게 계속 써왔던 것이다. 요즘은 객체 지향을 기반으로 하면서 함수형 프로그래밍을 섞거나, 그 반대처럼 혼합하여 사용하는 경우가 많다.  

 

자바스크립트

자바스크립트는 함수형 프로그래밍 기반 위에 객체지향 언어의 껍데기를 씌운 언어입니다. 이렇게 다소 실험적으로 탄생한 이 언어는 객체지향에 함수형 프로그래밍을 적당히 섞으면 훨씬 더 좋다는 것을 개발자들에게 알려주었고 이후 탄생한 다른 언어에도 영향을 끼치며 객체지향 언어에 함수형을 결합하는 형태의 멀티 패러다임의 근간을 마련해 주었습니다.

https://velog.io/@teo/functional-programming

 

자바스크립트는 클래스가 있으나, 클래스 답지 않다. 모든 것이 object를 기반으로 동작한다. 프로토타입 기반의 언어, 덕타이핑 가능. 멀티패러다임 프로그래밍 언어, 객체지향과 함수형 프로그래밍 방식을 동시에 지원한다. 


추천 글(OOP)

https://velog.io/@teo/oop

'프로그래밍' 카테고리의 다른 글

[LoRa] Wio-E5 mini 모듈 정리  (0) 2023.12.19
[Zigbee] FZ200BS 모듈 정리  (0) 2023.12.11
Socket vs WebSocket  (1) 2023.11.14
비동기 프로그래밍과 쓰레드  (0) 2023.11.13
디자인 패턴에 대한 생각  (0) 2023.11.12

댓글