개요

성공적인 프로그래밍?

모든 프로그래밍 패러다임은 성공적인 프로그래밍을 위해 존재한다. 성공적인 프로그래밍은 좋은 프로그램을 만드는 일이다. 좋은 프로그램은 사용성, 성능, 확장성, 기획 변경에 대한 대응력 등이 좋다. 이것들을 효율적이고 생산적으로 이루는 일이 성공적인 프로그래밍이다.

함수형 프로그래밍

함수형 프로그래밍은 성공적인 프로그래밍을 위해 부수 효과(side-effect)를 최소화하고 조합성을 강조하는 프로그래밍 패러다임이다.

⇒ 순수함수를 통해 부수 효과를 줄임으로써 오류를 줄이고 안정성을 높인다.

⇒ 모듈화 수준을 높임을 통해서 생산성을 높인다.

⇒ 함수형 사고방식은 문제의 해결 방법을 동사(함수)들로 구성(조합)하는 것

순수함수

순수 함수는 수학의 함수를 프로그래밍의 세계로 가져온 모델이다. 프로그래밍의 세계에는 무언가를 저장하고 변경하고 불러올 수 있는 상태라는 개념이 존재하지만, 수학의 세계에는 그런 개념이 없기 때문에 모든 함수는 함수 외부의 무언가에 절대 영향을 받지 않고 독립적으로 존재한다. 때문에 순수함수는 항상 동일한 함수를 반환한다. 항상 동일한 결과를 만들기 위해서 부수효과를 발생시킬 수 있는 요인이 없는 상태의 함수를 의미한다. 외부 변수를 포함하거나 외부의 상태를 변화시키지 않는(부수 효과를 발생시키지 않는) 함수이다.

function add (a, b) { // pure function
	return a + b;
}

var obj1 = { val: 10 };
function add2 (obj, x) { // not pure
	obj.val += b;
}
add2(obj1, 2);

var obj2 = { val: 20 };
function add3 (obj, x) { // pure function
	return { val: obj.val + b };
}

순수함수가 아닌 함수의 경우는 함수를 호출하는 시점에 따라서 결과가 다르기 때문에 시점을 파악하는 것이 중요하다. 예를들어 add2 라는 함수에서는 obj 의 상태에 따라서 결과가 다르기 때문에 obj의 상태를 개발자가 파악하는 것이 중요해진다. 이는 호출 시점 뿐만이 아니라 개발 시점에서도 마찬가지다.

반면 순수함수는 주어진 함수의 인자에 따라 항상 동일한 결과를 반환하기 때문에 다른 부수 효과에 집중하지 않고 함수의 로직 그 자체에만 집중할 수 있기 때문에 부수 효과를 걱정하며 사용하지 않아도 된다.

일급 객체

쉽게 말하면 함수를 값으로 다룰 수 있다는 의미이다. (변수에 담을 수 있고, 인자로 넘길 수 있거나, 변수, 인자를 통해 받은 함수를 또한 실행할 수 있다.) 자바스크립트에서는 함수는 일급 함수다.

function add_maker(a) {
	return function(b) { // closure
		return a + b;
	};
}

const add10 = add_maker(10);
console.log(add10(20)) .// 30