챌린지 8일차 학습 정리

챌린지 8일차 학습 정리

네이버 부스트캠프 9기 챌린지 8일차 학습 정리 페이지입니다.

  • 누군가 작성한 것을 그대로 쓰는 것이 아니라 나만의 언어로 재구조화하여 작성해야 합니다.
  • 기술 키워드에 대한 상세 내용도 좋고, 미션 해결 과정에서 기능 구현을 성공한 사례도, 트러블 슈팅 경험도 좋습니다.

목차

학습한 내용

함수형 프로그래밍(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하여 객체가 안전하기 때문입니다.
  • 단점
    • 객체가 가지는 값마다 새로운 객체가 필요합니다. 따라서 메모리 누수와 새로운 객체를 계속 생성해야 하기 때문에 성능 저하가 일어날 수 있습니다.

참고 자료

Comments