- 명령형 프로그래밍(How): 알고리즘을 명시하고 목표명시 X
- 절차지향 프로그래밍: 코드에 순서에 따라 계산
ex) c, c++ 등등 - 객체지향 프로그래밍: 각각의 객체에 따라 프로그램이 상호작용을한다
ex) java, c# 등등
- 절차지향 프로그래밍: 코드에 순서에 따라 계산
- 선언형 프로그래밍(What): 알고리즘을 명시하지않고 목표명시 O
- 함수형 프로그래밍: 함수만을 조합해서 소프트웨어를 만든다
함수형 프로그래밍(Functional Programming)
- 순수함수: 동일 인자를 넣었을때 항상 동일한 결과값을 반환해야한다.
외부에 전혀 영향을 받으면 안된다
//x
let a = 1;
function add(b){
return a+b;
}
//o
function add(a,b){
return a+b;
- 비상태, 불변성
(상태(변수)+행동(메소드)=객체지향)
//x
let person = {name:'lee', age:25};
function increaseAge(person) {
person.age = person.age + 1;
return person;
}
//o
const person = {name:'lee', age:25};
fucntion increaseAge(person){
return {...person,age: person.age + 1};// ... 을 이용해 배열이나 객체에 들어 있는
데이터를 낱개로 가져와서 복사해온다.
}
- 표현으로만 코딩: if, switch등을 사용하지않고 map,filter같은 함수로 프로그래밍을 해야한다
//x
let a = [1,2,3];
function multiply(a,b){
for(let i=0~
//o
function multiply(a,b){
return a.map(num => num * b);
- 일급함수: 함수를 변수에 담아서 값처럼 다룬다
let a = function(b){
return b++;
}
- 고차함수: 결과를 함수로 반환하거나 인자로 함수를 전달 받는 함수, 다른함수의 인자로 전달받는 함수를 콜백함수라고 한다
function plus(a,b){
function add(){
return a+b;
}
return add; //함수리턴
}
let c = plus(1,2);
console.log(c());
function plus(val, func){ //함수를 인자로 전달
return func(1,val);
}
function add(a,b){
return a+b;
}
console.log(plus(1,add);
장점
- 위의 특성으로 인해 Side-Effect(함수를 호출하면 외부의 상태가 변하거나 예상치 못한 에러발생 등등)를 만들지 않는다
- 불변성을 유지한다 -> 멀티 쓰레딩 환경에서 안정적으로 동작한다
단점
- 순수함수를 쓰는건 쉽지만 조합이 어렵다
- 순수함수 때문에 코드 가독성이 낮다
- for문 같은 것이 아닌 재귀함수를 통해 이뤄지기 때문에 무한루프에 빠질수 있다
'CS > CS' 카테고리의 다른 글
[CS] RESTful API (0) | 2022.03.07 |
---|---|
[CS] MVVM 간단하게 메모 (0) | 2022.03.02 |
[CS] Dependency Injection (0) | 2022.01.13 |
[CS] 프로토콜, 인터페이스 차이 (0) | 2022.01.12 |
[CS] 모듈, 라이브러리, 프레임워크, API (0) | 2022.01.12 |
댓글