# 인물 개개인의 상세한 인생사, 대상의 역사와 프로그래밍 분야 외적인 업적은 잘라낸다.
함수형 프로그래밍의 개요
1960~80년대의 프로그래밍은 객체지향적 프로그래밍이 대두된다.
기술이 발전하고 하드웨어, 소프트웨어의 크기가 커짐에 따라 복잡한 코드의 유지보수에 애로사항이 생기고,
자연스럽게 함수형 프로그래밍 패러다임이 도입되게 된다.
코드 설계의 모든 부분을 함수로 잘게 잘라 문제를 해결하는 함수형 프로그래밍은 변할 수 있는 부분을 잘라 독립시킴으로써 유지보수성을 향상시킨다.
함수형 프로그래밍의 특징
1. 순수 함수
동일 입력 = 항시 같은 값 반환
함수 실행이 프로그램 실행에 영향을 미치지 않아야 함
프로그램 상태나 함수 내부의 인자값을 변경하는 외부 요소가 없는 것
let a = 1;
function sub(a) {
return a + num;
}
sub함수의 내부에서 num값이 계산되기 때문에 순수함수가 아니다
function sub(a,b){
return a - b;
}
const result = sub(4,1);
sub함수는 프로그램 실행에 영향을 주지 않고 입력값에 의한 변환만이 있으므로 순수함수이다
2. 비상태, 불변성
데이터는 불변성을 유지해야 한다.
데이터를 변경할 경우, 원본을 변경하지 않고 복사해서 일부를 변경하고, 그것으로 작업한다
불변성 비적용
let member = {
name : "rooftopcaat",
age : "27",
};
const changeMember = (member) => {
member.name = "Dayzie";
return member;
};
그냥 변경됨
console.log(changeMember(member));
console.log(member.name);
불변성 적용
const member = {
name : "rooftopcaat",
age : 27,
};
const changeMember = (member) => {
return { ... member, name : "Dayzie" } ;
};
함숫값 리턴
console.log(changeMember(member));
console.log(admin.name);
3. 선언형 함수
함수형 프로그래밍에서는 제어문(for문)을 사용하지 않고 함수형 코드를 사용한다
const aNum = (nums) = > {
for ( let i = 0; i < nums.length; i++) {
nums[i] = nums[i] * nums[i];
}
};
const aNum = (nums) = > {
return nums.map((num) => num * num);
};
console.log(nums);
4. 1급 객체와 고차함수
1급 객체란 다른 객체에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킴
변수, 데이터구조에 값 저장 가능
파라미터 값 전달 가능
반환값 사용 가능
할당에 사용된 이름과 관계 없이 고유한 구별이 가능
동적 프로퍼티 할당 가능
이로 인해 함수를 (String / number / boolean / array / object)처럼 다룰 수 있다
고차함수는 함수 자체를 전달받고 전달한다.
여러 순수 함수들을 연쇄, 병렬적으로 조합/호출하여 더 큰 함수를 만들 때 고차함수를 사용할 수 있다.
const makeMyKorAddr = (gu) => (dong) => (nums) => `${gu}-${dong}-${nums}`;
함수형 프로그래밍의 장점, 단점
1. 장점
스파게티 코드에서 오는 가독성, 유지보수성 저하를 피하기 용이하다
테스트, 디버깅에 좋다
코드가 단축되고 개발 생산성이 올라간다
코드 재사용성이 높고 예측이 쉽다
2. 단점
학습 진입장벽이 높다
광범위한 환경 설정, 설계가 필요하다
수가 많아질수록 조합하기 어려워지며 꾸준한 리팩토링이 필요하다
함수형 프로그래밍에 대한 시각
함수형 프로그래밍 또한 구조적 프로그래밍, 객체지향 프로그래밍과 같이
하나로 딱 잘린 프로그래밍 방식이 아니라고 할 수 있다.
극단적 함수형 프로그래밍 언어인 Haskell을 제외하곤 Javascript와 같이 객체지향+함수의 멀티 패러다임을 더 많이 사용하는 추세이다
'Basic Knowledge > Paradigm' 카테고리의 다른 글
중간정리 : 패러다임에 대한 입체적 시각과 최신 트렌드 (0) | 2023.09.21 |
---|---|
프로그래밍 패러다임 (3) 객체 지향 프로그래밍 (0) | 2023.09.17 |
프로그래밍 패러다임 (2) 구조적 프로그래밍 (0) | 2023.09.17 |
프로그래밍 패러다임 (1) 절차 지향 프로그래밍 (0) | 2023.09.17 |