함수 지향 프로그래밍(Functional programing)

함수지향 프로그래밍은 함수를 통한 연산에 중점을 두고 변수와 상태(state)의 사용을 최소화하려는 프로그래밍 패러다임이다. 함수형 프로그래밍의 핵심은 불변성(Immutability)인데, 변수와 상태(state)와 대비되는 개념으로 상수와 무상태(stateless)를 의미한다. 각 함수들 사이에서 공유하는 값이나 상태가 없기 때문에 함수에 대한 테스트가 쉽고 멀티 쓰레드 환경에서도 견고함을 유지하기 객체지향과 비교해서 상대적으로 쉽다.

1. 순수한 함수 (Pure Function)

함수형 프로그래밍에서의 함수는 '순수'해야됨.

순수 함수의 조건

  1. 매개변수로 받은 값 이외의 외부 변수는 수정하거나 참조해서도 안됨
var z = 10;

function add(a) {
    return a + z;
}
// 함수 외부 변수 z를 참조했기 때문에 순수 함수가 아니다.
1
2
3
4
5
6
  1. 무언가를 반환해야 함
function add(a, b) {
    var c = a + b;
}
// a와 b를 더했지만 아무것도 반환하지 않았으므로 순수 함수가 아니다.
1
2
3
4
  1. 같은 입력 값을 넣었을 때 항상 같은 출력 값을 반환
function add(a, b) {
    return a + b;
}

add(1, 2) // 3
// 1, 2를 입력하면 항상 3이라는 결과가 나오는 순수함수
1
2
3
4
5
6

Why 순수 함수?

외부 변수를 참조하는 순수하지 않은 함수는 언제든지 외부 변수가 변할 위험이 있기 때문에 부작용이 생길 수 있지만 순수함수는 입력에 대한 출력이 보장되어있기 때문에 부작용이 없다.

2. 불변 (Immutable)