함수형 프로그래밍 (Functional Programming)

CCY·2020년 6월 11일
1
post-thumbnail

글쓰는 이유

개발을 배우면서 정말 많이듣는 함수형 프로그래밍 이라는 말을 많이들었다...
여태까지 그냥 함수형 프로그래밍이란게 있다고만 생각했는데 오늘 짦게나마 찾아보았다..

유튜브를 보면 함수형 프로그래밍 관련 자료는 엄청많다...

사람마다 설명하는 방법등등 다양하지만..일단 위 동영상의 이야기는 귀에 잘 들어오고 나같은 초보고 큰 그림 잡게 해주기엔 좋은거같아 일단 글을 쓰고싶었다.

동영상 은 30분이라 링크에 주어진 Slide 기준으로 정리하려고 한다.

함수형 프로그래밍이란?

  • 프로그래밍의 방법 중 하나
  • 개발자의 사고 방식
  • 코딩 스타일

왜 함수형이냐

  • 여기서 짦게 설명하지만 OBJECT ORIENTED PROGRAMMING (OOP)은 까다롭다고 한다.
    예시로 proptype,this 등을 잠깐 언급하는데 ..JS를 배우면 이해하기 어려운 것들 중에 포함되는것은 사실이다..
  • 유지보수, 디버그, 안정성이 탁월하다고 한다.
  • 커뮤니티가 크다

함수형 프로그래밍 하는법
방법은 간단하다..모든것을 함수로 하여 input 과 output을 이루게 하면 된다고 한다.

FUNCTIONAL VS NOT FUNCTIONAL

NOT FUNCTIONAL:

var name = “Anjana”;
var greeting = “Hi, I’m ”;
console.log(greeting + name);
=> “Hi, I’m Anjana”

FUNCTIONAL:
function greet(name) {
  return “Hi, I’m ” + name;
 }greet(“Anjana”);
=> “Hi, I’m Anjana”

위에서 차이가 무엇인가???

Not Functional 은 name,greeting 이라는 변수를 만들어서 출력하는것이고,
Functional 은 한 함수(Function)으로 묶어서 결과를 출력한것이다.

함수형 사용할때 주의할것:

  • use "pure" function (순수함수)를 사용하라고 한다.
Not pure:
var name = “Anjana”;
function greet() {
  console.log(“Hi, I’m ” + name);
}

Pure:
function greet(name) {
  return “Hi, I’m ” + name;
}

여기서 순수함수가 아니라고 하는것은 console.log는 화면에 출력만 하고 결국에는 output이 없어서 순수함수가 아니라고 설명한다...
그러니까 input output을 확실히 하는것들이 순수 함수라는것인가 보다..??

HOF(Higher order function)
HOF를 많이 사용하라고 한다..

-map,reduce,filter, forEach 등등 HOF를 많이 사용하고...Mutation을 피하라고 한다.

map, reduce,filter 들을 보면 array method (배열) 방법들 중에 하나이며 이것들은 새로운 배열을 만들지 직접적으로 내용을 변경하지 않는것들이다.

Mutation (bad!):
var rooms = [H1,H2,H3];rooms[2] =H4;
rooms;
=> ["H1", "H2", "H4"]

No mutation (good!):
var rooms = [H1,H2,H3];
Var newRooms = rooms.map(function (rm) {  if (rm ==H3) { returnH4; }  else { return rm; }});newRooms;
=> ["H1", "H2", "H4"]rooms;
=> ["H1", "H2", "H3"]

여기서 persistent data structure(영속 자료 구조)를 소개해준다.

아직 자료구조에 대하여 완벽하게 이해 한것은 아니지만 ...
이해 한 내용대로는:

우라가 배열을 만들때 [1,2,3] 이 있고 여기에 [4,5,6]을 붙이고 싶은데 기존 배열을 mutate 하면 안되니까 .map 과 같은 새로운 배열을 만든다. 그럼..

A= [1,2,3]
B= [1,2,3,4,5,6] 이 생기게되지만.. 만약에 우리가 계속 [7,8,9,10 ....] 등등을 추가해야 하는 경우가 생기면.. 컴퓨터 메모리? 에서는 계속 기존 배열, 새로운 배열을 불러 불피요한 메모리를 사용하여 최적화? 에 안좋다고 하는것같다..

그래서 해답이 presistent data와 호환되는?

라이브러리를 사용하던지, closure? 를 사용하라고 한다.

presistent data(영속자료구조) 는 자신의 전 버전을 기억하여 거기에 새로운 변하는 내용을 붙인다는 개념인것 같다.

자료구조에 대하여 많이 모르지만 일단 이런 구조가 존재하는구나 라고 깨달음을 얻고 간다..

presistent data wikipedia

profile
✍️ 기록을 습관화 하자 ✍️ 나는 할 수 있다, 나는 개발자가 될거다 💪🙌😎

0개의 댓글