함수형 프로그래밍

2018, May 14    

#함수형 프로그래밍이란 무엇인가?

간단히 말해서 '함수를 이용하는 프로그래밍이다' 라고 답변할 수 있다.

그렇다면 여기서 '함수'란 무엇일까?

바로 수학적인 함수를 말한다.
f(x) = y
위와 같은 공식을 보면 우리는 x라는 인수를 전달 하였을때 y라는 결과가 '부작용 없이' 반환되는 것을 의심하지 않는다.

        z=ramdon();
        y=z*z;
        
하지만 위와 같은 함수는 random이 호출 될때마다 결과가 달라질 수 있는, 즉 부작용을 발생시키는 함수다.
즉, 함수형이라는 말은 '수학의 함수처럼 부작용이 없는'을 의미한다.


* 결론: 함수형프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나다.
명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 대부분 람다 대수에 근간을 두고 있으며, 다수의 함수형 언어는 람다 연산을 발전시킨 것으로 볼 수 있다.
참조 링크 : https://devhue.github.io/blog/functional-programming

  • 함수형 프로그래밍: 시스템의 다른 부분에 영향을 미치지 않는다면 내부적으로는 함수형이 아닌 기능도 사용
    (내부적으로는 부작용이 발생하지만 호출자가 이를 알아차리지 못하게 감춘다.)
  • 순수 함수형 프로그래밍: 함수 그리고 if-then-else 등의 수학적 표현만 사용

  • #선언형 프로그래밍

    프로그래밍 방식은 크게 '어떻게how'에 집중하는 프로그래밍 방식과 '무엇을'에 집중하는 방식이 있다.

        //작업을 어떻게 수행할 것인지 집중하는 방식으로, '명령형 프로그래밍'이라고 부르기도 한다.
        Transaction mostExpensive = transactions.get(0);
        if(mostExpensive == null) {
        throw new IllegalArgumentException("Empty list of transactions");
        }
        for(Transaction t: transactions.subList(1, transactions.size())) {
        if(t.getValue() > mostExpensive.getValue()) {
        mostExpensive = t;
        }
        }
        
        //질의문 자체로 문제를 어떻게 푸는지 명확하게 보여 줌으로서,
        //문제 자체가 코드로 명확하게 드러난다는 특징이 있다.
        Optional
        <Trasaction> mostExpensive =
            transactions.stream()
            .max(comparing(Trasaction:getValue))
            

    함수형 프로그래밍은 선언형 프로그래밍을 따르는 대표적인 방식으로, 부작용이 없는 계산을 지향한다. 이 두가지 개념은 좀 더 쉽게 시스템을 구현하고 유지보수하는 데 도움을 준다.