「Functional Programming for Java Developers」 왜 함수형 프로그래밍을 배워야 하는가?

Why Functional Programming?

Posted by OG on September 10, 2022

동시성 프로그램을 잘 작성해야 한다

동시성 문제에 접근하기 위한 최선의 방법이 함수형 프로그래밍이라고들 한다.

  • 동시성 문제 : 동시성 문제란 두 개 이상의 세션이 공통된 자원에 대해 모두 읽고 쓰는 작업 (Read→Write) 을 하려고 하는 경우 발생할 수 있는 문제

그만큼 함수형 프로그래밍은 동시성에 대한 명확한 원리를 제공하였고, 높은 수준의 추상적 개념을 탄생시켰다.

문제는 데이터를 관리하는 문제로 귀결된다

객체관계 매핑 (ORM) 이나 그와 유사한 다른 미들웨어는 관계형 데이터를 객체로 변환하고,

객체를 어플리케이션 주위로 전송하여 서로 주고 받으며, 최종적인 업데이트를 위해 객체를 다시 관계형 데이터로 변환시키는 일련의 과정을 통해서 지속적으로 오버헤드를 발생시킨다.

오버헤드를 발생시키는 추가적인 코드는 테스트하고 유지보수 해야한다.

저자는 위와 같은 관행이 생겨난 이유가 우리가 객체는 지나치게 사랑하지만 관계형 데이터는 미워하기 때문이라 한다. (공감한다)

SQL 을 통해 얻은 결과 같은 관계형 데이터는 결국 함수적인 방법을 통해 관리할 수 있는 데이터 컬렉션에 불과하다.

그렇다면 객체를 경유하는 대신 그러한 데이터 위해서 직접 작업을 하는 것이 더 낫지 않겠느냐고 제안한다.

함수형 프로그래밍은 모듈화되어 있다

모듈화를 위해 필요한 것은 함수형 프로그래밍에서 말하는 함수의 성질이다.

그것은 side effects 를 가지지 않고, 다른 객체에 종속되지 않기 때문에 많은 곳에서 재사용할 수 있다.

함수형 프로그래밍이 더 유용하고, 재사용이 더 편리하고, 구성이 용이하고, 테스트하기 더 간편한 추상화를 제공한다.

더 빠르게 작업해야 한다

코드가 사용자 요구사항에 대해 최소한으로 충분한 수준을 유지하는 동시에 변화에 대해선 유연할 수 있게 만드는 방법을 다시 생각해 볼 필요가 있는데,

함수형 프로그래밍이 그러한 지점에서 도움을 줄 수 있다.

함수형 프로그래밍은 단순함으로의 복귀다

함수형 프로그래밍은 우연히 발생한 복잡성 (accidental complexity) 에 대한 응답이다.

우연히 발생한 복잡성: 도메인을 구현하게 위해 선택된 방식에서 발생한 복잡성

다시

명확한 방식으로 타입, 함수를 설계하게 된다.

간결하게 코드를 작성하게 된다.

모듈의 재사용에 대해 다르게 생각하게 된다.

빠르게 변화하고 민첩하게 반응해야 하는 현대 문제 해결에 있어 함수형 프로그래밍이 유용하다고 저자는 얘기한다.

그리고 저자는 함수형 프로그래밍을 공부하면서 객체를 제한적으로 사용하면서 기본적으로 함수형 프로그램을 작성하는 사람이 되었다고 한다.

객체 지향도. 함수형 프로그래밍도 도구에 지나지 않는다. 명심하자