스위프트와 함수형 프로그래밍

시루봉로·2023년 3월 20일
0

iOS, 스위프트 정리

목록 보기
3/3
post-thumbnail

정리

프로그래밍 패러다임의 종류

  • 명령형 프로그래밍: 무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 건지를 설명하는 방식
    • 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++)
    • 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#)
  • 선언형 프로그래밍: 어떻게 할건지(How)를 나타내기보다 무엇(What)을 할 건지를 설명하는 방식
    • 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)

함수형 프로그래밍 패러다임

함수형 프로그래밍 패러다임은 프로그램이 상태의 변화없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임이다. 프로그램이 동작하는 흐름에서 상태의 변화가 없다면 프로세스나 스레드 별로 특정 값을 참조하기 위해 락을 걸거나 대기할 필요가 없기에 함수 호출이 각각 상호 간섭 없이 배타적으로 실행되므로 병렬처리를 할 때 부작용이 거의 없다.

함수형 프로그래밍 패러다임은 아래 4가지의 특징을 가지고 있다.

  • 부수 효과(Side Effect): 다음과 같은 변화 또는 변화가 발생하는 작업을 의미한다.
    • 변수의 값이 변경됨
    • 자료 구조를 제자리에서 수정함
    • 객체의 필드값을 설정함
    • 예외나 오류가 발생하며 실행이 중단됨
    • 콘솔 또는 파일 I/O가 발생함
  • 순수 함수(Pure Function): 부수 효과들을 제거한 함수들을 순수 함수라고 부른다. 함수형 프로그래밍에서 사용하는 함수는 이러한 함수들이다.
    • Memory 또는 I/O 관점에서 부수 효과가 없는 함수
    • 함수의 실행이 외부에 영향을 끼치지 않는 함수
  • 1급 객체(First-Class Object): 다음과 같은 것들이 가능한 객체를 의미한다.
    • 변수나 데이터 구조 안에 담을 수 있다.
    • 파라미터로 전달할 수 있다.
    • 반환값으로 사용할 수 있다.
    • 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.
  • 참조 투명성(Referential Transparency)
    • 동일한 인자에 대해 동일한 결과를 반환해야 한다.
    • 참조 투명성을 통해 기존의 값은 변경되지 않고 유지된다.

스위프트가 함수형 프로그래밍 패러다임을 차용한 의의

함수형 프로그래밍 패러다임으로만 프로그램을 작성하면 다음과 같은 장점이 있다.

  • 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.
  • 멀티 코어 혹은 여러 개 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다.
  • 상태 변화에 따른 부작용에서 자유로워지므로 순수하게 기능 구현에 초점을 맞추어 설계할 수 있다.

애플은 이러한 장점으로 인해 스위프트에서 함수형 프로그래밍 패러다임을 강조한다. 이는 애플의 프레임워크를 벗어나 다른 영역에서 스위프트를 사용했을 때 순수하게 함수형 프로그래밍 패러다임만으로 프로그램을 작성할 수 있기 때문이다.


출처

본 글은 아래 링크를 기반으로 정리하였습니다.

profile
안녕하세요.

0개의 댓글