Search
Duplicate

순수함수와 선언형,명령형 프로그래밍

Created time
2024/03/23 05:52
Last edited time
2024/04/02 04:10
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 피드백은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

순수함수란? 불변성과 사이드 이펙트와의 연관 관계

순수 함수는 입력을 받아서 출력을 내놓는 특별한 종류의 함수입니다. 그리고 이 함수는 외부의 어떤 것도 바꾸지 않으며, 입력이 같으면 항상 같은 출력을 반환합니다.
예를 들어, 순수 함수를 설명하려면 "사과를 자르는 절단기"를 생각해보세요. 이 절단기는 사과를 입력으로 받아서 자르고, 그 결과로 자른 사과를 반환합니다. 이때, 절단기는 사과를 자르는 작업만 수행하고, 주변 환경에는 아무런 영향을 주지 않습니다. 절단기가 작동할 때마다 사과를 주면 항상 같은 방식으로 자르게 됩니다.
순수 함수는 두 가지 중요한 키워드를 갖고 있는데요, 바로 불변성(Immutability)과 사이드 이펙트(Side Effects)입니다.
1.
불변성(Immutability):
불변성이란 함수가 입력으로 받은 값에 아무런 영향을 미치지 않고, 그대로 유지되는 것을 의미합니다. 또한, 같은 입력에 대해서는 같은 결과를 return 해야 합니다.
function addTwoNumbers(a: number, b: number): number { return a + b; // 예측 가능한 동작 } console.log(addTwoNumbers(2, 3)); // 출력: 5 console.log(addTwoNumbers(2, 3)); // 출력: 5 (동일한 입력에 대해 동일한 출력)
TypeScript
복사
위의 코드에서 함수 addTwoNumbers는 동일한 입력에 대해 항상 동일한 출력을 반환합니다. 따라서 함수의 동작은 예측 가능하며, 외부 상태에 의존하지 않고 입력 값에만 의존합니다.
2.
사이드 이펙트(Side Effects):
사이드 이펙트란 함수의 실행이 외부 환경에 영향을 미치는 것을 말합니다. 이는 함수가 실행되는 동안에 변수를 변경하거나, 파일을 읽거나 쓰거나, 네트워크 요청을 보내는 등의 작업을 수행하는 것을 의미합니다.
// 순수함수 X // 함수 내부에서 외부 변수를 변경하는 예시 let externalVariable: number = 10; function multiplyByTwo(num: number): number { externalVariable *= 2; // 외부 변수 변경 (사이드 이펙트) return num * 2; } console.log(multiplyByTwo(5)); // 출력: 10 console.log(externalVariable); // 출력: 20 (변경됨)
TypeScript
복사
위의 코드에서 함수 multiplyByTwo는 외부 변수 externalVariable을 변경하고 있습니다. 이러한 외부 변수의 변경은 함수 실행에 따른 사이드 이펙트입니다.
순수함수는 바로 이런 부수효과를 초래하지 않는 함수여야 합니다. 즉 함수 외부의 값이나 함수에 전달된 값을 변경하지 않는 함수를 말합니다
정리하자면 순수 함수는 입력 값을 변경하지 않고, 외부 환경에 영향을 주지 않으며, 항상 동일한 입력에 대해 동일한 출력을 반환하는 함수입니다. 이러한 함수의 특징은 사이드 이펙트를 최소화하여 예측 가능하고 안정적으로 동작하게 만들어줍니다. 또한 함수 간의 의존성이 줄어들어 코드를 이해하고 테스트하고 디버그하기가 훨씬 쉬워집니다.

명령형 프로그래밍과 선언형 프로그래밍

순수 함수와 명령형 및 선언형 프로그래밍 간에는 깊은 연관성이 있습니다.
1.
순수 함수와 명령형 프로그래밍:
명령형 프로그래밍은 컴퓨터가 실행해야 하는 단계적인 명령을 중심으로 구성됩니다. 이는 코드가 어떻게 수행되어야 하는지를 명시적으로 지정하는 것을 의미합니다.
명령형 프로그래밍에서는 변수의 값이 변할 수 있고, 상태 변경에 의해 프로그램의 동작이 결정됩니다. 이와는 대조적으로, 순수 함수는 입력 값에만 의존하고 외부 상태에 의존하지 않으며, 같은 입력에 대해 항상 같은 결과를 반환합니다. 따라서 순수 함수는 명령형 프로그래밍에서 외부 상태를 변경하지 않는 불변성과는 반대 개념입니다.
2.
순수 함수와 선언형 프로그래밍:
선언형 프로그래밍은 코드가 어떻게 수행되어야 하는지를 명시하지 않고, 무엇을 할 건지를 선언하는 방식으로 구성됩니다.
순수 함수는 선언형 프로그래밍의 핵심이며, 함수형 프로그래밍 패러다임의 중요한 부분입니다. 함수형 프로그래밍에서는 함수를 주요 구성 요소로 사용하며, 이 함수들은 가능한 한 순수하게 작성되어야 합니다.
결론적으로, 순수 함수는 명령형 프로그래밍에서의 불변성과 대조되며, 선언형 프로그래밍의 주요 구성 요소입니다. 명령형 방식은 시스템 자원의 효율을 최우선으로 생각하지만, 선언형 방식은 범용으로 구현된 함수를 재사용하면서 문제를 해결하는 경향이 있습니다.

참고