함수형 사고, 진화하라

함수형사고, 진화하라

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

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

이전 글은 함수형 사고, 열심히보다는 현명하게에서 보실 수 있습니다.

코드의 재사용

객체지향 언어

  • 수많은 자료구조
  • 자료구조 내 연산
  • 클래스에 종속된 메서드를 만드는 것을 권장하여 반복되는 패턴 재사용

함수형 언어

  • 적은 자료구조
  • 자료구조 내 많은 연산

  • 자료구조에 대해 공통된 변형 연산 적용

    • 주어진 함수를 이용해 특정 경우에 맞춰 커스터마이징
  • 적은 수의 자료구조, 많은 연산자

    • 함수 수준의 캡슐화는 커스텀 클래스 구조를 만드는 것보다 좀 더 세밀하고 기본적인 수준에서 재사용이 가능해진다.
  • 디스패치 다시 생각하기

    • 디스패치 : 언어가 작동 방식을 동적으로 선택하는 것
      • 다형성을 상속과 분리하면 강력하고 상황에 맞는 디스패치 방식이 가능

함수형 자료구조

  • 대부분의 함수형 언어들은 예외 패러다임을 지원하지 않기 때문에 개발자는 다른 방법으로 오류 조건을 표현

  • 예외는 많은 함수형 언어가 준수하는 전제 몇 가지를 깨트린다

    • 함수형 언어는 순수함수 선호

      • 예외를 발생시키는 것은 예외적읜 프로그램 흐름을 야기하는 부수효과

      • 함수형 언어들은 주로 값을 처리하기 때문에 프로그램의 흐름을 막기보다는 오류를 나타내는 리턴 값에 반응하는 것을 선호

    • 함수형 언어는 참조 투명성 선호

      • 호출하는 입장에서 값 하나를 사용하든, 하나의 값을 리턴하는 함수를 사용하든 다를 바가 없어야 한다

함수형 오류 처리

Either 클래스

  • 다른 두 값을 리턴해야 하는 경우, 해당 행동을 모델링하는 자료구조

  • 왼쪽, 또는 오른 쪽 값 중 하나만 가질 수 있게 설계

    • 이런 자료구조를 분리합집합이라 한다
  • 보통 오류 처리에서 주로 사용
  • 디폴트 값을 제공한다는 이점이 있다

Option 클래스

  • Either 클래스와 유사한 클래스
  • 적당한 값이 존재하지 않을 경우 none, 성공적인 리턴일 경우 some 사용

차이

  • Either은 어떤 값이든 저장할 수 있고
  • Option은 성공과 실패의 값을 저장