본문 바로가기
CS/CS

[CS] 함수형 프로그래밍

by 리드맥 2022. 1. 12.

  • 명령형 프로그래밍(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

댓글