개요

정의

  • 선언형 프로그래밍(declarative programming)이란 ‘무엇을’ 풀어내는가에 집중하는 패러다임
  • 함수형 프로그래밍(functional programming)은 선언형 패러다임의 일종
  • 명령형과 함수형에서 사용하는 함수는 부수효과의 유무에 따라 차이가 있음
  • 대입문이 없는 프로그래밍 방식으로, 작은 문제를 해결하기 위한 함수를 작성
  • 작은 ‘순수 함수’들을 블록처럼 쌓아 로직을 구현하고 ‘고차 함수’를 통해 재사용성을 높인 프로그래밍 패러다임

 

장점

  • 더 나은 모듈화와 짧은 코드를 제공하여 함수 단위의 코드 재사용이 수월함
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬움 → 테스트와 디버깅이 용이함
  • 가독성이 높은 코드를 작성하기 쉬움
  • 부수효과를 제거할 수 있음

 

단점

  • 함수형 프로그래밍의 개념을 이해하기가 쉽지 않음
  • 프로그래밍을 진행하며 수 많은 함수들을 파악하고 유지 관리하기 힘들어짐
  • 광범위한 환경 설정이 필요할 수 있음
  • 함수가 많아질수록 함수를 조합하기 복잡해지며 꾸준한 리팩터링이 필요할 수 있음
  • 반복이 for문이 아닌 재귀를 통해 이루어지는데, 재귀적 코드 스타일은 무한 루프에 빠질 수 있음

 


특징

부수 효과가 없는 순수 함수1급 객체로 간주하여 파라미터나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있음

부수 효과(Side Effect)

  • 부수효과란 다음과 같은 변화 또는 변화가 발생하는 작업을 의미
    • 변수의 값이 변경됨
    • 자료 구조를 제자리에서 수정함
    • 객체의 필드값을 설정함
    • 예외나 오류가 발생하며 실행이 중단됨
    • 콘솔 또는 파일 I/O가 발생함

 

순수 함수(Pure Function)

const pure = (a, b) => {
	return a + b
}
  • 위와 같은 부수 효과를 제거한 함수로, 출력이 입력에만 의존함
  • 만약 다른 전역 변수가 출력에 영향을 주면 더이상 순수 함수가 아니게 됨
  • 장점
    • 함수 자체가 독립적이며 side effect가 없으므로 Thread에 안정성을 보장받음
    • thread-safe하여 병렬 처리를 동기화없이 진행 가능
    • 프로그램의 변화 없이 입력 값에 대한 결과를 예상할 수 있어 테스트가 용이

 

고차 함수(Higher Order Function)

  • 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것
  • 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 함

 

1급 객체(First-Class Object)

  • 일급 객체란 다음이 가능한 객체
    • 변수나 메서드에 함수를 할당할 수 있음
    • 함수 안에 함수를 매개변수로 담을 수 있음
    • 함수가 함수를 반환할 수 있음
  • 함수형 프로그래밍에서 함수는 1급 객체로 취급받기 때문에 함수를 파라미터로 넘기는 등의 작업이 가능

 

참조 투명성(Referential Transparency)

  • 동일한 인자에 대해 항상 동일한 결과를 반환해야 함
  • 참조 투명성을 통해 기존의 값은 변경되지 않고 유지됨

 


References

+ Recent posts