Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

박철순

함수형 프로그래밍 - 2 본문

Javascript/함수형 프로그래밍

함수형 프로그래밍 - 2

박철순입니다 2022. 8. 26. 00:13

해당 글은 인프런에 "자바스크립트로 알아보는 함수형 프로그래밍(ES5)"를 보고 작성했습니다.

그리고 저의 메모겸 생각정리를 위해 틀린 내용이 있을 수 있습니다.

https://www.inflearn.com/course/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/dashboard

 

[무료] 자바스크립트로 알아보는 함수형 프로그래밍 (ES5) - 인프런 | 강의

마플(http://www.marpple.com)의 CTO 유인동님이 알려주는 함수형 프로그래밍에 대한 강좌 입니다. 함수형 프로그래밍으로 라이브러리를 직접 만들어가며 함수형 프로그래밍의 패러다임과 코딩의 즐거

www.inflearn.com

 

함수형 프로그래밍은 함수를 조합하여 이루어지는데

 

일급객체란?

  1. 변수에 할당 할 수 있다.
  2. 인자로 넘길 수 있다.
  3. 객체의 리턴값으로 사용이 가능하다.

이 때, 자바스크립트 내에서 함수는 일급객체이다. 

그러나 원시타입(String, Number, Boolean, Null, undefined, Symbol) 은 불변성을 가지고 있고,

객체(Array, Object, function, Class)는 참조타입을 가지고 있습니다. 

 

원시타입은 값을 스택 메모리에 할당하고,

해당 원시타입의 값이 바뀌거나 해당 메모리 값을 복사를 하면 새로 메모리에 할당이됩니다. 

이때 기존의 스택 메모리에 있는건, 스택에서 범위에서 벗어나면 메모리에서 사라진다.

새로운 원시타입은  '실행 컨텍스트(Execution Context)의 렉시컬 환경(Lexical Environment)' 에 담겨있습니다.

( 이 부분은 애매합니다. 혹시 틀린 부분이 있다면 말씀해주세요. ) 

 

참조타입은 값을 스택 메모리에 올려두고 참조값을 올려두고 힙 메모리에 값을 넣어두어서, 

값을 새로 복사를 해도 같은 참조값을 가지고, 복사한 값을 변경해도 같은 참조값을 가지고 있기 때문에 같이 변경됩니다.

 

function add_maker(a) {
  return function(b) {
    return a + b
  }
}

const add10 = add_maker(10);

console.log(add10(20)); // 30

const add5 = add_maker(5);
const add15 = add_maker(15);

console.log(add5(20)); // 25
console.log(add15(20)); // 35

위 부분에서 실행이 되는 이유는 일급객체이기때문이다.

add10에 add_maker(10)을 넣으면 a라는 매개변수에 할당이 되고, 그 '실행 컨텍스트의 렉시컬 환경' 상에서 함수 값내에 변수가 추가 된거라고 볼 수 있다. 그리고 리턴값으로  add10 변수에 할당이 된다. add10을 호출하게되면 add_maker(10)에 리턴값인 function(b) { return a + b } 가 실행되고 add10의 인자는 b에 들어가게된다.

실행 컨텍스트의 렉시컬 환경에 값을 가지고 있기 때문에 위처럼 실행된다.

 

function f4(f1,f2,f3) {
  return f3(f1() + f2());
}

f4(() => 2,() => 1,(a) => a *a) // 9

위 로직에서 가장 안쪽에 있고 왼쪽에 있는 함수부터 실행이 된다.

 

해당 내용의 로직은 인프런 영상을 보고 참고 했고,

설명글은 각종 글을 보고 추측성 글이기에 틀릴 수 있습니다. 특히 실행컨텍스트 부분에서 틀릴 확률이 매우 높습니다.

틀린 부분을 알려주시면 감사하겠습니다.

 

참고 사이트

https://speakerdeck.com/deepu105/v8-memory-usage-stack-and-heap?slide=15 

https://velog.io/@nomadhash/Java-Script-%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%99%80-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC

https://charming-kyu.tistory.com/19

https://stackoverflow.com/questions/20428532/how-does-garbage-collector-works-for-primitive-data-type-in-java#comment30513927_20428565

https://ui.toast.com/weekly-pick/ko_20200228

'Javascript > 함수형 프로그래밍' 카테고리의 다른 글

함수형 프로그래밍 - 1  (0) 2022.08.24