벨로그를 찾아보다가 함수형 프로그래밍이란 단어를 봐서 한번 찾아보면 좋을거 같아서 찾아보게 됐다.

함수형 프로그래밍의 등장

함수형 프로그래밍 패러다임이 나오기 전에 개발자들은 명령형 프로그래밍으로 코드를 작성하였는데, 이는 소프트웨어 크기가 커짐에 따라 복잡하게 엉켜있는 코드를 유지보수하는 것이 힘들다 라는 것을 깨닫게 해줬다. 그리고 이를 해결하기 위해서 개발자들은 함수형 프로그래밍이라는 새로운 패러다임을 만들어내게 된다. 함수형 프로그래밍은 거의 모든 모듈을 함수로 나누어 조합하는 형식으로 문제를 해결하는데, 명령형 프로그래밍의 단점이였던 가독성을 높여주고 유지보수를 용이하게 해준다.

함수형 프로그래밍의 특징

함수형 프로그래밍은 명령형 프로그래밍의 단점을 보완하기 위해 나온 패러다임인 만큼 많은 특징을 가지고 있다.

순수함수

let a = 1;

function add(b) {
	return b + a;
}

다음과 같은 함수는 전역 변수 a를 참조하면서 함수가 동작한다. 이렇게 전역상태를 참조하면 부수효과가 날 수 있기 때문에 순수함수라고 할 수 없다.

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

다음과 같은 함수는 입력값에 대해서만 변환이 있기 때문에 부수효과도 나지 않고, 프로그램에 영향을 주지 않는다. 따라서 다음과 같은 코드가 순수 함수라고 할 수 있다.

비상태, 불변성

let person = {name : "임동현", age : 18};

function nameChange(person, name) {
	person.name = name;
	return person;
}

다음과 같은 함수는 person 객체를 받아서 직접 바꿔주기 때문에 불변성을 유지하지 못한다.

let person = {name : "임동현", age : 18};

function nameChange(person, name) {
	return {...person, name};
} 

다음처럼 함수 안에서 person객체에 접근하지 않고 복사본을 만들어 작업을 한다면 불변성을 유지 할 수 있다.