Post

함수형 프로그래밍 - (1)

함수형 프로그래밍 - (1)

어떤것이 함수형 프로그래밍일까?

순수 함수

함수형 프로그래밍의 특징으로는 순수 함수라는 특징이 있습니다. 입문기에서도 적었다 싶이 순수 함수는 SideEffect가 없는것을 순수함수이며 SideEffect는 외부 상태값을 참조하거나 변경하지 않는것 않는것을 얘기합니다.

예를 들어

1
2
3
4
let num = 1;
function add(a){
    return a + num;
}

이것은 순수함수가 아닙니다.

1
2
3
function add(a,b){
    return a+b;
}

이것은 순수함수 입니다. 순수함수는 호출할때마다 항상 같은 값을 가져옵니다.


객체도 마찬가지 입니다.

1
2
3
4
5
6
let student = { name : "kim", grade : 1};

function incStudent(student){
    student.grade = 2;
    return student;
}

이것은 순수 함수가 아닙니다. 객체를 가져와서 객체의 값을 변경하기 때문입니다.

1
2
3
4
5
let student = { name : "kim", grade : 1};

function incStudent(student){
    return {...student, grade : student.grade++};
}

이것은 순수함수입니다. 객체를 변경하지 않고 새로운 객체를 반환해주기 때문에 외부의 상태를 변경하지 않기 때문입니다.

이렇게 되면 부수효과 즉 sideEffect를 만들지 않아 불변성을 유지하고, 멑티쓰레딩 환경에서도 안정적이게 만들수 있습니다.


for, switch, if 같은것을 사용하지말자

1
2
3
4
5
6
7
8
9
const numbers = [1,2,3,4,5]

function iterate(numbers) {
    let sum = 0;
    for (let i = 0; i < numbers.length; i++){
        sum += arr[i];
    }
    return sum;
}

이렇게 for, switch, if를 쓰는것은 함수형 프로그래밍이라고 볼 수 없습니다.

1
2
3
4
5
const numbers = [1,2,3,4,5]

function iterate(numbers) {
    return numbers.reduce((acc,cur)=>acc+cur,0);
}

위의 for문을 reduce나 map, filter등 여러가지 메서드들을 활용해서 작성하는것을 함수형 프로그래밍 이라고 합니다.


일급함수 특징을 활용하자

함수를 변수에 할당해서 사용하는 방법도 있습니다.

1
2
3
4
const double = (x) => x * 2;
const addOne = (x) => x + 1;
const doubleThenAddOne = (x) => addOne(double(x));
console.log(doubleThenAddOne(5)); 

함수에서 또 다른 함수를 리턴하는 고차함수 방법도 있습니다.

1
2
3
4
5
const greaterThan = n => x => x > n;

const greaterThan10 = greaterThan(10);
console.log(greaterThan10(15)); // true
console.log(greaterThan10(5));  // false


마지막으로

함수형 프로그래밍의 기본기는 알았는데 아직까지 깊게 사용하는법을 잘 몰라 여러가지의 공부가 필요할것 같습니다. 앞으로 함수형 프로그래밍에 더 집중해서 공부하고 정리해보도록 하겠습니다.

This post is licensed under CC BY 4.0 by the author.

© Banal. Some rights reserved.