개발을 배우면서 정말 많이듣는 함수형 프로그래밍 이라는 말을 많이들었다...
여태까지 그냥 함수형 프로그래밍이란게 있다고만 생각했는데 오늘 짦게나마 찾아보았다..
사람마다 설명하는 방법등등 다양하지만..일단 위 동영상의 이야기는 귀에 잘 들어오고 나같은 초보고 큰 그림 잡게 해주기엔 좋은거같아 일단 글을 쓰고싶었다.
동영상 은 30분이라 링크에 주어진 Slide 기준으로 정리하려고 한다.
함수형 프로그래밍이란?
왜 함수형이냐
함수형 프로그래밍 하는법
방법은 간단하다..모든것을 함수로 하여 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)으로 묶어서 결과를 출력한것이다.
함수형 사용할때 주의할것:
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”) { return “H4”; } 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(영속자료구조) 는 자신의 전 버전을 기억하여 거기에 새로운 변하는 내용을 붙인다는 개념인것 같다.
자료구조에 대하여 많이 모르지만 일단 이런 구조가 존재하는구나 라고 깨달음을 얻고 간다..