woowacourse-study / 2022-modern-java-in-action

우아한테크코스 4기 모던 자바 인 액션 스터디
10 stars 4 forks source link

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

Open bugoverdose opened 2 years ago

bugoverdose commented 2 years ago

문제

많은 언어들에서 함수형 프로그래밍 패러다임을 도입하고 있으며, 이는 자바도 예외가 아니다. 이 함수형 프로그래밍의 주요 특징에 대해 체계적으로 정리하여 서술하시오.

선정 배경

관련 챕터

bugoverdose commented 2 years ago

함수형 프로그래밍이란 간단히 말해 "최대한 함수를 사용하여 프로그래밍을 하자는 패러다임"이다.

이때 "함수"란 단순히 메서드를 의미하는 것이 아니라 동일한 입력값에 대해 언제나 동일한 출력값이 나오는 수학적인 의미에서의 함수를 말한다. 다양한 입력값이 동일한 값을 출력하는 것은 문제 없지만, 동일한 입력값에 대해서는 다양한 결과가 나오는 경우 함수라고 볼 수 없다.

여기서 나아가 특정 코드가 함수가 되기 위해서는 몇 가지 조건이 더 붙는다.

  1. 변경 불가능한 값만을 인자로 받아 활용한다.

    • 기본적으로 입력값에 객체가 들어오는 경우 side-effect의 가능성이 증가한다.
    • 인스턴스를 인자로 받는 경우 오직 불변객체만 허용된다.
  2. 그 자체로 일급 시민이어야 한다.

    • 즉, 메서드의 인자로 쓰이거나, 변수에 값으로 할당될 수 있어야 한다. 자바8부터 가능해졌다.
    • 기본적으로 함수를 "사용"할 수 있어야 한다.
  3. 예외를 발생시키면 안 된다.

    • 기본적으로 예외가 던져지는 것은 출력값의 한 종류로 간주되지 않는다.
    • 사실 예외가 존재할 수 밖에 없는 경우, 앱 전체에 대해 예외처리를 하는 작업을 생략해서는 안 된다고 생각한다. 다만, 기본적으로 함수가 되기 위해서는 예외 상황에서 Exception을 throw하지 않고, 특정 값(null, -1, 등)을 반환하도록 해야 하는 것으로 보인다.

이러한 사항들을 전부 지킬 수 있고 지키는 것이 권장되는 언어가 있는가 하면, 지킬 수 없거나 지키는 것이 컨벤션에 위배되는 언어도 분명 존재한다.

그러나 다양한 프로그래밍 언어들이 이러한 함수형 프로그래밍 패러다임에 기반하여 만들어지고, 진화하고 있다는 점은 명료하다. 자바에서 함수형 프로그래밍을 적용하는 방법도 좋지만, 일단 개발자로서 이 패러다임에 대해 이해하는 작업은 필요하다.