made by GPT
왜 그럴까요?
- 함수형 프로그래밍에서는 데이터가 불변이라 업데이트가 일어나지 않기 때문에 스레드가 어떤 시점에서 데이터를 읽더라도 같은 데이터임을 보장받을 수 있습니다.
- 함수형 프로그램에서는 순수함수를 사용하기 때문에 외부상태에 관계없이 같은 인자로 함수를 실행하면 같은 결과를 보장받습니다.
함수형 프로그래밍이란 무엇인가요?
- 함수형 프로그래밍은 프로그램을 함수로 구성하는 패러다임입니다.
- 함수를 순수함수로 작성합니다.
- 순수함수는 부수효과가 없는 함수로, 함수의 실행이 외부에 영향을 끼치거나 영향을 받지 않습니다.
- 평가시점과 무관하게 같은 입력에서 항상 같은 결과를 반환합니다.
- 문(statement)을 사용해 값을 업데이트하지 않고, 표현식(expression)을 사용해 값을 다른 값에 매핑해 로직을 작성합니다.
명령형 프로그래밍과 무엇이 다른가요?
- 명령형 프로그래밍은 값을 업데이트하는 일련의 문(statement)로 프로그램을 구성합니다.
- i, numser[i]는 값이 프로그램이 진행됨에 따라 변경됩니다.
let numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
numbers[i] = numbers[i] * 2;
}
- 함수형 프로그래밍은 값을 다른 값으로 매핑하는 표현식(expression)을 사용해 프로그램을 구성합니다.
- 값을 업데이트하는 대신 기존의 값과 매핑되는 새로운 값을 새로운 공간에 저장합니다.
- numbers와 doubleNumbers는 값이 변경되지 않습니다.
const numbers = [1, 2, 3, 4, 5];
const doubleNumbers = [1, 2, 3, 4, 5].map(number=>number*2);
함수형 프로그래밍의 장점은 무엇인가요?
- 코드를 간결하게 작성할 수 있습니다.
- 입력이외에 다른 스캐폴딩(발판)이 필요하지 않기 때문에 테스트가 쉽습니다.
- 인자의 값이 같다면 항상 같은 결과를 반환하기 때문에 코딩 및 디버깅이 쉽습니다.
- 함수형 프로그래밍 언어에서는 함수 자체를 일급객체로 다루기 때문에 함수를 재사용하기 쉽습니다.
- 일급객체란?
- 어디든지 사용가능한 객체입니다.
- 거의모든 프로그래밍 언어에서 숫자를 변수에 담을 수 있고, 함수의 인자로 넘길 수 있고, 함수의 반환값으로 사용할 수 있습니다. 이는 숫자가 일급객체임을 의미합니다.
- 함수를 변수에 담을 수 있고, 함수를 인자로 사용할 수 있고, 함수 자체를 반환값으로 사용할 수 있다면 함수가 일급객체입니다. 함수형 프로그래밍 언어에서는 보통 함수를 일급객체로 취급합니다.
- 데이터를 변경할 수 없고, 외부에 영향을 받지 않으므로 동시성 문제가 발생하지 않습니다.
함수형 프로그래밍의 단점이 있나요?
- 저장공간이 많이 필요합니다.
- 함수형 프로그래밍에서는 값을 업데이트 할 수 없으므로 매번 다른 저장공간에 실행 결과를 저장해야합니다.
- 프로그램을 오롯이 함수형 프로그래밍으로 구현하기 힘듭니다.
- 대부분의 프로그램이 네트워크 통신, 데이터베이스 등을 필요로합니다. 따라서 프로그램 전체를 함수형 프로그래밍으로 구현하기 힘듭니다.
레이스 컨디션이란 무엇인가요?