2023. 4. 16. 18:05ㆍ- 프로그래밍 패러다임
함수형 프로그래밍 (functional programming)
한 변수에 멀티스레딩으로 여러 스레드가 접근하여 값을 변경할 경우 예상치 못하게 결과 값이 변경 될수 있습니다. 함수형 프로그래밍은 변수의 부수적인 값 변경을 원천 배제함으로써 오류를 방지 합니다. (문제의 소지가 있는 일은 하지 않는 코딩 방식).
외부 변수를 사용 할 그 본체에 접근해서 변경 하는 것이 아니라, 파라미터로 들어온 데이터를 복사해서 작업을 하기 때문에 외부 변수는 변경이 되지 않아 부작용이 일어나지 않습니다.
다음은 함수형 프로그래밍의 특징들 입니다.
함수형 프로그래밍의 특징
1. 순수함수 (pure functions)
함수에서 외부의 상태값을 참조하거나 외부의 상태를 변경하는 것은 순수 함수라고 볼수 없습니다.
동일한 인자를 넣었을 때 동일한 결과값을 반환하고 언제 선언이 되었는지가 결과에 영향을 주지 않도록 작성을 해야 합니다.
위의 왼쪽 코드는 num값에 외부에서 접근하여 값을 바꾸면 function add()의 결과 값이 달라집니다. 오른코드 처럼 동일한 인자를 넣었을때 동일한 결과값을 반환하도록 작성 해야 합니다.
2. 비상태, 불변성
위의 코드에서 person.age = person.age + 1 처럼 함수에 전달된 데이터를 변경 하는 것은 함수형이 아닙니다. 함수형 프로그래밍에서는 전달된 데이터를 변경하는 것이 아니라 아예 새로운 오브젝트(객체)를 만들어서 결과값으로 전달해야 합니다.
함수형 프로그래밍에서는 외부의 상태나 함수에 인자로 전달된 데이터의 상태를 변경 하지 않음으로써 side effect(부작용)을 만들지 않으므로 불변성(바뀌지 않는것)을 유지하기 때문에 여러가지 동시 다발적인 멀티쓰레딩 환경에서도 안정적으로 동작 할수 있습니다.
3. if, switch, for 문을 사용불가
함수형 프로그래밍은 대입문이 없는 프로그래밍이라고 정의 할 수 있습니다.
위의 간단한 for문에서 i에 값이 대입됩니다. 이는 함수형 프로그래밍이라고 할 수 없습니다.
위 코드는 for문은 없지만 for문의 코드와 같은 기능을 하는 함수입니다.
위의 코드 처럼 for문 없이(if, switch포함) 작성을 해야 함수형 프로그래밍이라고 할 수 있습니다.
4. 일급함수(first class)
함수를 변수에 할당 하거나 함수를 함수의 인자로 전달 하거나 함수를 리턴 할수 있습니다.
5. 고계함수(higher order funtions)
함수자체를 인자로 전달하거나 함수에서 또다른 함수를 리턴 할수 있습니다.
'- 프로그래밍 패러다임' 카테고리의 다른 글
객체지향 프로그래밍이란? (0) | 2023.04.07 |
---|