함수형 사고, 왜?

함수형 사고, 왜?

해당 게시글은 Functional Thinking 함수형 사고 를 읽고 공부한 내용을 정리한 것입니다.

저작권 문제가 발생할 시 해당 글은 삭제됩니다 :<

패러다임의 전환

함수형 프로그래밍은 객체 지향과 개념적으로 같은 궤도를 따른다. 명령형 프로그래밍을 하다보면 효율을 높이기 위해 여러 작업을 한 루프에 넣음으로써, 작업들을 복잡하게 하는 경우가 종종 있다. 함수형 프로그래밍에서는 고계함수를 통해 추상화의 단계를 높여서 문제를 더욱 명료하게 볼 수 있다.

고계함수

  • 함수를 인수, 반환 값으로서 취급하는 함수
  • 큰 범위의 기능만을 정의해두고 상세한 기능은 함수의 사용자가 결정하는 게 핵심

언어 / 런타임에 제어를 양도하기

1990년대에는 PC가 보편화되면서 소위 4세대 언어들이 폭발적으로 유행했다. 이 언어들의 장점은 고수준의 추상화였다. 명령어 하나로 3세대 언어에서는 여러 개의 명령이 필요했던 일을 할 수 있었다.

시간이 갈수록 개발자는 지루한 일들을 언어나 런타임에 점점 맡기게 된다. JAVA가 메모리 관리 작업을 쉽게 해줬다면 함수형 언어는 다른 빌딩 블록을 고수준 추상 개념으로 대체해준다.

간결함

객체지향 프로그래밍은 움직이는 부분을 캡슐화하여 코드 이해를 돕고, 함수형 프로그래밍은 움직이는 부분을 최소화하여 코드 이해를 돕는다.

마이클 페던스

  • OOP
    • 캡슐화, 스코핑, 가시성 등의 메커니즘은 상태 변화에 대한 세밀한 재어를 위해 존재
    • 그러나 상태 변화와 스레드까지 합쳐지면 복잡해지는 단점
    • 재사용의 단위
      • class
      • method
    • 고유한 자료구조로 작성하길 권장
      • 해당 자료 구조에 특정 동작을 method로 붙인다.
  • funtional
    • 가변 상태를 제어하는 메커니즘을 극복하지 않고, 변화를 아예 제거하는데 주력
      • 오류가 발생하기 쉬운 기능을 적게 노출한다면, 개발자가 오류를 만들 가능성이 줄어든다는 이론
    • 재사용의 단위
      • 최적화된 동작으로 몇몇 자료구조(list, set, map)를 이용하는 방식
    • 함수 수준의 캡슐화는 모든 문제에 대한 새로운 클래스 구조를 구축하는 것보다 세분화되고 기초적인 수준에서 재사용이 가능
      • JAVA의 다양한 자료구조가 아닌
      • 클로저를 사용해 한 단계 높은 추상화를 진행

다음 글은 함수형 사고, 전환에서 보실 수 있습니다.