ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 함수형 프로그래밍 이란
    Python/Python 2024. 7. 3. 18:21
    반응형

    함수형 프로그래밍 페러다임에서는 프로그램의 상태를 변경하는 일련의 흐름의 단계가 아닌 수학적인 함수 평가를 통한 프로그램 플로우를 달성한다. 순수한 함수형 프로그래밍 상태의 변경을 피하고 가변데이터 구조를 이용한다.

    함수형 프로그래밍의 일반적인 기본 용어를 아라보자

    • Side Effect(부작용): 함수가 자신의 로컬 환경 바깥에 있는 상태를 수정한다면 해당 함수는 Side Effect을 가진다. 다시 말해 Side Effect이란 함수를 호출한 결과로 발생되는 함수 바깥에서 관찰 할 수 있는 모든 변경이다. Side Effect의 예시로는 글로벌 변수의 수정, 함수 범위 바깥에서 이루어지는 객체의 속성 변경, 외부 서비스로의 데이터 저장 등이 있다. side effect는 OOP 개념의 핵심이다. OOP에서는 클래스 인스턴스의 애플리케이션의 상태를 캡슐화 하기 위해 사용되는 객체이고, 메서드는 이 객체들의 상대를 조작하기 위해 해당 객체에 바인드 된 함수이다.
    • Referential Transparency(참조 투명성): 함수 또는 표현식이 참조적으로 투명하면 이를 그 출력값에 해당하는 값으로 바꾸어도 프로그램의 동작을 변경하지 않는다. 그러므로 Side Effect 없는 것은 참조 투명성을 위한 필요 조건이지만, Side Effect 없는 모든 함수가 Referential Transparency 는 아니다 (필요충분조건 오랜만에보네..,,)  예를 들어 pow(x, y)는 Referential Transparency 한 함수다 ( 참조하는 변수가 다 보임) 하지만 datetime.now()같은 것은 Referential Transparency 은 아니다.
    • Pure Function(순수 함수): 순수 함수는 부작용을 갖지 않으며 같은 입력에 대해 항상 같은 값을 반환하는 함수, 달리 말하면 이 함수는 참조적으로 투명하다. 모든 수학적 함수는 정의상 순수 함수다.
    • First-Class Function(1급 함수): 어떤 언어의 함수가 다른 값 또는 엔티티로서 취급되며 이 언어는 1급함수를 갖고 있다고 부른다. 1급 함수들은 인수로 전달될 수 있고, 함수 반환값으로 변환되며 변수에 할당될 수 있다. 다시 말해, 1급 함수를 가진 언어는 함수를 1급 시민으로 다룬다. 파이썬의 함수들은 1급 함수다.

    따라서.

    함수형 언어는 다음과 같이 정의 할 수 있따.

    • First-Class Function - 1급 함수를 가진 언어
    • Pure Function  - 순수 함수만을 다루는 언어
    • 모든 상태 수정과 Side Effect를 피하는 언어

     

    다만

    파이썬은  순수한 함수형 프로그래밍언어가 아니라서 어떤 Side Effect도 갖지 않는 완전히 순수한 함수로만 사용해서 만든 유용판 파이썬 라이브러리를 찾기 힘들지만 다른 언어에서 함수형언어에서 사용할 수 있는 순수한 함수들을 몇 개 가지고있다.

    • 람다 함수와 1급함수
    • map(), filter(), reduce()
    • 부분 객체 및 부분함수
    • 제네레이터 및 제네레이터 표현식

    파이썬은 순수한 함수형 언어는 아니지만 피처들을 이용하면 함수형 언어적인 방식으로 코드를 작성 할 수 있따

    반응형

    댓글

Designed by Tistory.