프로그래밍 패러다임 중 하나로, 순수 함수 와 불변성을 강조하며 프로그램의 상태 변경을 최소화 하는 것을 목표로 한다.
함수형 프로그래밍은 수학적 함수의 개념을 기반을 두고 있으면, 이를 통해 코드의 간결성, 모듈성 및 예측 가능성을 높일 수 있다.
함수형 프로그래밍의 주요 특징
복잡한 상태 관리와 부작용을 최소화하고, 모듈화와 재사용성을 높이는데 도움이된다.(하스겔,클로저,스칼라 및 에릭슨)
순수함수 : 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 외부 상태에 영향을 주지 않는다. 함수의 결과를 예측하기 쉬워지고, 테스트와 디버깅이 용이해진다.
불변성: 데이터의 상태를 변경하는 대신, 변경된 새로운 데이터를 생성한다. 상태 변경으로 인한 버그 발생 가능성을 줄일 수 있다.
고차함수 : 고차 함수는 함수를 인자로 받거나 함수를 반환할 수 있는 함수 이다. 코드를 더 간결하게 작성할 수 있으며, 중복을 줄이고 재사용성을 높일 수 있다.
커리: 커리는 여러 개의 인자를 가진 함수를 하나의 인자를 받는 함수로 변환하는 기법이다. 커리를 사용하면 함수를 더 유연하게 조합하고, 코드를 간결하게 작성할 수 있다.
지연 평가: 지연 평가는 표현식이 필요한 시점까지 계산을 미루는 기법이다. 이를 통해 불필요한 계산을 줄이고 성능을 향상시킬 수 있다.
함수형프로그래밍 장점
문제와 오류를 피할 수 있다.
테스트와 디버깅이 용이하다.
더 나은 모둘화와 짧은 코드를 제공한다.
가독성이 높은 코드를 작성하기 쉽다
부수효과를 제거할 수 있다.
재사용이 쉽다.
프로그램의 동작을 예측하기 쉽다.
한계점
함수형 프로그램의 개념의 이해하기 쉽지 않다.
수 많은 함수들을 파악하고 유지 관리하기 힘들어진다.
광범위한 화경 설정이 필요 할 수 있다.
힘수가 많아질 수록 조합하기 복잡해지며 꾸준한 리팩토링이 필요 할 수있다.
꼬리질문
자바스크립트 클로저란?
주변 상태 (어휘적 환경)에 대한 참조와 함께 묶인(포함된) 함수의 조합.
클로저는 내부 함수에서 외부 함수의 범위에 대한 접근을 제공한다. javascript에서 클로저는 함수 생성 시 함수가 생성될 때마다 생성된다.
function init(){
var name = 'Mozilla'; // name은 init에 의해 성성된 지역 변수.
function displayName() { // displayName() 은 내부 함수이며, 클로저이다.
console.log(name) // 부모 함수에서 선언된 변수를 사용한다.
}
displayName()
}
init()
displayName()은 init()안에 정의된 내부 함수이며 init() 함수 본문에서만 사용할 수 있다.
내부 함수에서 외부 함수의 벼눗에 접근할 수 있기 때문에, displayName() 역시 부모 함수 init()에서 선언된 변수 name() 접근할 수 있다.
function makeFunc() {
const name = "Mozilla"
function displayName(){
console.log(name);
}
return displayName;
}
const myFunc = makeFunc()
myFunc()
클로저는 함수와 함수가 선언된 어휘적 환경의 조합입니다.
이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다.
클로저가 필요한 이유
정보의 접근 제한(캡슐화) - Private Method를 구성 할 수 있다.
같은 클래스 내부의 특정 메소드에서만 해당 메소드를 호출이 가능한 것을 의미
상태 유지
클로저 함수는 외부 함수의 실행이 끝나더라도 외부 함수 내 변수를 사용 할 수 있기에 이러한 특성을 이용하여 특정 데이터를 스코프 안에 두고 계속 최신 상태로 유지하여 사용합니다.
react 내에서는 상태관리로 사용 되는 useState가 이를 의미한다.
전역 변수의 사용 억제 - 모듈화에 유리
클로저 함수를 각각의 변ㅅ에 할당하면 각자 독립적으로 값을 사용하고 보존할 수 있다.
함수의 재사용성을 극대화 함수 하나를 독립적인 부품의 형태로 분리하는 것을 모듈화라 한다.
자바스크립트 프로토타입이란?
자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체를 가지고 있다.
모든 객체는 그들의 프로토타입으로 부터 프로퍼티와 메소드를 상속받는다.
상속되는 정보를 제공하는 객체를 프로토타입 이라한다.
함수형 프로그래밍이란?
프로그래밍 패러다임 중 하나로, 순수 함수 와 불변성을 강조하며 프로그램의 상태 변경을 최소화 하는 것을 목표로 한다. 함수형 프로그래밍은 수학적 함수의 개념을 기반을 두고 있으면, 이를 통해 코드의 간결성, 모듈성 및 예측 가능성을 높일 수 있다.
함수형 프로그래밍의 주요 특징
복잡한 상태 관리와 부작용을 최소화하고, 모듈화와 재사용성을 높이는데 도움이된다.(하스겔,클로저,스칼라 및 에릭슨)
함수형프로그래밍 장점
한계점
꼬리질문
자바스크립트 클로저란?
주변 상태 (어휘적 환경)에 대한 참조와 함께 묶인(포함된) 함수의 조합. 클로저는 내부 함수에서 외부 함수의 범위에 대한 접근을 제공한다. javascript에서 클로저는 함수 생성 시 함수가 생성될 때마다 생성된다.
displayName()은 init()안에 정의된 내부 함수이며 init() 함수 본문에서만 사용할 수 있다. 내부 함수에서 외부 함수의 벼눗에 접근할 수 있기 때문에, displayName() 역시 부모 함수 init()에서 선언된 변수 name() 접근할 수 있다.
클로저는 함수와 함수가 선언된 어휘적 환경의 조합입니다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다.
클로저가 필요한 이유
자바스크립트 프로토타입이란?
자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체를 가지고 있다. 모든 객체는 그들의 프로토타입으로 부터 프로퍼티와 메소드를 상속받는다. 상속되는 정보를 제공하는 객체를 프로토타입 이라한다.
참조 : https://thecho7.tistory.com/entry/%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8DFunctional-Programming%EC%9D%B4%EB%9E%80 https://code-lab1.tistory.com/245