2021. 4. 13. 21:59ㆍ기타
함수형 프로그래밍이란
함수형 프로그래밍의 개념
함수형 프로그래밍은 순수함수를 조합하고 공유 상태, 변경 가능한 데이터 및 부작용을 피하여 소프트웨어를 만드는 프로세스입니다. 함수형 프로그래밍은 명령형이 아닌 선언형이며 애플리케이션의 상태는 순수 함수를 통해 전달됩니다. 애플리케이션의 상태가 일반적으로 공유되고 객체의 메서드와 함께 배치되는 객체 지향 프로그래밍과는 대조됩니다.
함수형 프로그래밍의 특징
순수 함수
순수함수란 같은 입력이 주어지면 항상 같은 출력을 반환하고 부작용이 없는 함수를 의미합니다. 그리고 프로그램의 의미를 변경하지 않고 결과 값으로 함수 호출을 대체할 수 있습니다.
합성 함수
합성 함수는 새로운 함수를 만들거나 계산하기 위해 둘 이상의 함수를 조합하는 과정입니다.
불변성
불변성이란 객체를 생성한 후에 수정할 수 없는 것을 의미하고 있습니다. 이 불변성은 함수형 프로그래밍의 핵심 개념입니다. 불변성이 지켜지지 않는다면 프로그램의 데이터 흐름이 손실되기 때문입니다.
부작용이 없음
부작용이란 반환값 이외에 호출된 함수 밖에서 관찰할 수 있는 애플리케이션 상태 변화입니다. (ex: 외부 변소 또는 객체 속성 수정, 콘솔에서 로깅 등등...) 함수형 프로그래밍은 순수함수로분터 부작용을 격리하고 캡슐화합니다.
선언형과 명령형 프로그래밍
선언형 프로그래밍
선언형 프로그래밍은 흐름 제어를 추상화하고, 대신에 데이터 흐름을 설명하는 코드 라인을 사용합니다. 여기서 데이터 흐름이란 무엇을 하는지를 의미합니다.
const doubleMap = numbers => numbers.map(n => n * 2);
console.log(doubleMap([2, 3, 4])); // [4, 6, 8]
위와 같은 선언적 코드는 명령형과 비교했을 때, 표현에 더 의존하고 있습니다. 표현식은 어떤 값을 평가하는 코드 조각입니다. 표현식은 대개 함수 호춣, 값 그리고 결과값을 생성하기 위해 평가되는 연산자의 조합입니다.
명령형 프로그래밍
명령형 프로그래밍은 원하는 결과를 얻기 위해 특정 단계를 설명하는 코드 라인을 사용합니다.
const doubleMap = numbers => {
const doubled = [];
for (let i = 0; i < numbers.length; i++) {
doubled.push(numbers[i] * 2);
}
return doubled;
};
console.log(doubleMap([2, 3, 4])); // [4, 6, 8]
명령형 코드는 구문을 자주 사용합니다. 구문은 어떤 동작을 수행하는 코드 조각입니다. 일반적으로 사용되는 구문의 예로는 for, if, switch, trhow 등이 있습니다.