챌린지 8일차 학습 정리
네이버 부스트캠프 9기 챌린지 8일차 학습 정리 페이지입니다.
Tips
누군가 작성한 것을 그대로 쓰는 것이 아니라 나만의 언어로 재구조화하여 작성해야 합니다.
기술 키워드에 대한 상세 내용도 좋고, 미션 해결 과정에서 기능 구현을 성공한 사례도, 트러블 슈팅 경험도 좋습니다.
학습한 내용
함수형 프로그래밍(Functional Programming)
함수형 프로그래밍의 개념
함수형 프로그래밍이란 어떻게 할 건지(How)를 나타내기보다 무엇(What)을 할 건지를 설명하는 방식인 선언형 프로그래밍
패러다임을 따르는, 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
함수형 프로그래밍의 특징
함수형 프로그래밍의 특징을 간략하게 설명하자면 다음과 같습니다.
- 함수가 1등 시민 first-class citizen
- 함수를 타입으로 지정할 수 있다.
- 함수를 인자값으로 넘길 수 있다.
- 함수를 리턴값으로 받을 수 있다.
요약하자면, 함수형 프로그래밍에서 함수를 객체처럼 변수나 함수의 인자, 리터럴하게 다룰 수 있습니다.
또한 함수형 프로그래밍의 특징을 자세하게 설명하자면 다음과 같습니다.
부수 효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다.
부수 효과(Side Effect)
부수 효과란 다음과 같은 변화 또는 변화가 발생하는 작업을 말합니다.
- 변수값 변경
- 자료 구조를 제자리에서 수정
- 객체의 필드값 변경
- 예외, 오류 발생
- 콘솔 또는 파일 I/O 발생
순수 함수(Pure Function)
순수 함수는 입력값이 동일하면 결과가 동일하게 리턴되는 수학 함수와 마찬가지로 함수형 프로그래밍 언어에서는 함수를 순수 함수
라고 말한다. 순수 함수는 부수 효과를 제거한 함수에 해당합니다.
- Memory or I/O의 관점에서 Side Effect가 없는 함수
- 함수의 실행이 외부에 영향을 끼치지 않는 함수
1급 객체(First-class Object)
1급 객체란 변수나 데이터 구조 안에 담을 수 있으며, 파리미터로 전달할 수 있고, 리턴값으로 사용할 수 있는 객체를 말합니다. 함수형 프로그래밍에서는 함수는 1급 객체에 해당합니다.
참조 투명성
참조 투명성이란 컴퓨터 프로그램의 특성 중 하나로, 프로그램 동작의 변경없이 관련 값을 대채할 수 있다면 표현식을 참조 상 투명하다고 말할 수 있다. 즉, 프로그램의 행동에 영향을 받지 않고 직접적인 값으로 대체 가능한 것을 말한다.
순수 함수로 만들면 함수 외부의 값이나 객체를 참조할 때 의존적으로 동작하지 않기 때문에 참조 투명성을 가지고 부작용이 없다. 반대로 말하면 부작용이 있는 함수는 입력값이 동일해도 함수 외부의 값에 따라서 다른 값이 리턴된다.
불변성
불변성이란 객체가 생성된 이후 그 상태를 변경할 수 없는 것을 말하며, 기존의 상태값을 유지하면서 새로운 상태값을 추가하는 것을 의미합니다. 이 때 상태를 변경한다는 것
은 값을 재할당하는 것
과 다릅니다.
자바스크립트에서 불변성을 유지하는 타입
boolean
number
string
null
undefined
Symbol
자바스크립트에서 불변성을 유지하지 않는 타입
Object
Array
불변성의 특징
- 장점
- 생성자, 접근 메서드에 대한 방어 복사가 필요하지 않습니다.
- 멀티스레드 환경에서 동기화 처리없이 객체를 공유할 수 있습니다. 이는 불변이기 때문에 thread-safe하여 객체가 안전하기 때문입니다.
- 단점
- 객체가 가지는 값마다 새로운 객체가 필요합니다. 따라서 메모리 누수와 새로운 객체를 계속 생성해야 하기 때문에 성능 저하가 일어날 수 있습니다.