230130(월)
🎄 성장일지 3.1
책 행복한 이기주의자(웨인 다이어)
의 내용에 자극받아 시작하는 소박한 성장기록
살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?<br/> 성장하고 있는 것이 살아 있는 것이다.<br/> 생명의 유일한 증거는 성장이다!
🌳 키워드 (1.0)<br/> 최대한 간단하게 정리, 추후에 보면서 스스로 설명<br/> 🍉 경험 위주로 (2.0)<br/> 단순 정보를 전달하기보다 무엇을 배웠고 어떻게 해결했는지 짧고 간단하게 작성<br/> ❄️ 정해진 템플릿에 맞춰서 (3.0)<br/> 키워드, 경험 모두 좋다. 다만 매일 작성하기로 마음 먹은만큼 핵심만 간결하게 정리할 수 있게 템플릿을 작성 (3.1) 230102부터 시작되는 학습에 관한 내용 추가
🔑 오늘의 키워드
순수함수(Pure Function)
- 부수 효과(side effect)가 없는 함수.
- 어떤 함수에 동일한 인자를 주었을 때,
항상
같은 값을 반환하는 함수 - 즉, 우리가 수학에서 배우던 함수의 개념
불변성(Immutability)
- 변하지 않는 성질
- 자바스크립트에서 원시 타입은 기본적으로 불변성을 갖는다.
- 객체는 기본적으로 가변성을 갖는다.
- 불변하는 객체를 만들기 위해 Object.freeze(), rest parameter을 통한 객체 반환 등의 방법이 있다.
참조 투명성(Referential Transparency)
- 함수가 함수의 외부 영향을 받지 않는 것
- 동일한 입력에 대해 동일한 값을 반환하는 성질
함수형 프로그래밍
- 부수 효과(side effect)를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임
부수 효과(side effect)
- 외부의 상태를 변경하는 것 또는 함수에 전달된 매개변수의 상태를 직접 변경하는 것
고차함수
- 함수를 인자로 전달받는 함수
- 함수를 반환하는 함수
- 인자로 받은 함수를 필요한 시점에 호출하거나 클로저를 이용하여 반환한다.
- 자바스크립트에서 함수는
일급 객체
이기에 가능하다!
클로저
어떤 함수(외부함수) A
에서 선언한변수 a
를 참조하는내부함수 B
를 외부로 전달할 경우, A의 실행 컨텍스트가 종료됐음에도변수 a
가 사라지지 않는 현상
익명함수
- 익명함수 자체는 아래와 같은 형태로, 함수의 이름이 존재하지 않는다.
function () { console.log("Hello World! Hello Jayden!"); }
- 리터럴 방식으로 변수에 담겨서 사용하도록 되어있다.
- 일반적으로 함수를 재사용하지 않고 한 번만 쓰고 싶을 때, 사용한다.
- 함수 선언문과 달리 함수 호이스팅이 일어나지 않아, 메모리를 아낄 수 있다.
참고자료
- 함수형 프로그래밍과 순수함수
- 부수효과와 참조투명성
- 불변성
- 고차함수
- 클로저:
코어 자바스크립트
책 - 익명함수
📝 요약 및 하루 간단 회고
객체지향 프로그래밍에 푹 빠져있었는데(현재 진행 중), 오늘부터는 함수형 프로그래밍에 대해 공부하게 됐다. 솔직히 처음엔 이제 조금 객체 단위로 세상을 바라보고 코드를 쓸 줄 알게 되었기에, 쬐끔 괜히 함수형 프로그래밍이 맘에 안들었다.(객체지향 공부 방해하는 느낌) 그런데 이게 웬걸... 아직 더 알아야할 게 많지만, 함수형 프로그래밍이 강조하는 순수함수, 부수효과 줄이기, 참조 투명성 등의 개념은 굉장히 신선했고 재미있었다. 어릴 적부터 수학을 좋아했던 터라, 외부 변수라는 개념조차 없는 수학에서의 함수를 적용하는 게 재미있었다. 단지, 그렇게 작게 나누어진 함수들을 구성하고 조합하는 과정에서 사용되는 고차함수, 함수 전달, 클로저 등은 아직은 쪼오금 어렵다. 다행히 배열에서의 고차함수들은 알고리즘을 풀면서 자주 사용해서 상당히 편리하긴 했다. 의도적으로 if, switch문과 같은 분기점과 while, for 등의 반복문을 고차함수로 바꿔서 적용하니 직관적이고 그 중간 중간 과정이 한눈에 쉽게 들어온다. 객체지향 때처럼 뭔가 시야가 확장되는 기분이 들랑말랑하고 있다!!! 얼른 함수형으로도 세상을 바라볼 수 있게 되면 좋겠다 :)
오늘의 잘한 점
- 객체지향으로 구현되어있는 코드를 전부 함수형 프로그래밍으로 구현
- 더 나아가 함수들을 모듈화
- 타입스크립트에 더 익숙해지고 있는 점
오늘의 아쉬운 점
- typescript compile 시 tsconfig의 target 옵션과 cli에서 주는 --target의 옵션 차이를 정확히 모르겠다.(열심히 찾아봐도 뭔가 속시원한 답이 없다 ㅠ)
undefined