[iOS] Swift의 함수형 프로그래밍 요소(예: map, filter, reduce)를 사용하는 경우, 어떤 장점이 있으며, 언제 사용하는 것이 적절한가요?

Zerom·2024년 1월 20일
0

iOS 질문 답변

목록 보기
6/9
post-thumbnail

내가 생각한 대답

함수형 프로그래밍은 작고 독립적인 함수들을 활용하기 때문에 코드가 간결해지고 가독성이 향상 됩니다. 또한 코드가 선언적이어서 의도가 명확해지고, 루프나 조건문을 줄일 수 있습니다. 그리고 작은 함수 단위로 코드를 분배하고 조합하기 때문에 재사용성을 높이고, 각 함수는 독립적으로 테스트가 가능합니다. 마지막으로 불변성으로 인해 부작용이 적어지고 코드의 예측 가능성을 높여주므로 코드의 안정성을 높이는 데 좋습니다. 그래서 데이터 변환 작업을 할 때 고차함수와 같은 함수형 프로그래밍 요소를 사용할 수 있으면 좋고, 불변성을 강조하기 때문에 여러 쓰레드에서 안전하게 동작할 수 있어 병렬 처리가 필요한 경우 사용하면 좋습니다.

추가 질문

함수형 프로그래밍 패러다임을 채택함으로써 발생할 수 있는 단점은 무엇인가요?

함수형 프로그래밍은 불변성을 강조하고 새로운 값을 생성하는 것이 일반적이기 때문에 메모리 사용량이 늘어날 수 있습니다. 그리고 외부 API나 상호작용처럼 가변 상태를 다뤄야 할 때에는 함수형 프로그래밍을 적용하기 어려울 수 있습니다. 마지막으로 복잡한 상태 관리나 루프, 가변 상태를 요구하는 일부 알고리즘을 사용할 때에는 함수형 프로그래밍이 성능에 영향을 줄 수 있습니다.

함수형 프로그래밍과 객체지향 프로그래밍을 어떻게 효과적으로 조합할 수 있나요?

객체지향 프로그래밍에서는 객체의 상태를 변경하는 것이 일반적이지만 함수형 프로그래밍에서는 불변성을 강조합니다. 그래서 불변한 데이터 구조를 사용하거나 상태 변경을 제한하는 메서드를 통해 변경을 수행한다면 객체의 불변성을 유지하면서도 필요한 상태 변경을 허용할 수 있습니다. 또한 객체지향 코드에서 고차 함수를 활용하는 것도 하나의 방법이 될 수 있습니다. 마지막으로 객체지향 코드에서도 모나드를 활용해 상태를 조작하거나 예외를 처리하는 등의 작업을 추상화 할 수 있습니다.

참고

함수형 프로그래밍이란?

  • 함수형 프로그래밍이란 함수를 일급 객체로 취급하고 함수의 조합을 통해 프로그램을 구성하는 스타일을 강조하는 프로그래밍 패러타임으로 부작용을 최소화 하려는 노력과 불변성, 일급 함수, 고차 함수 등의 개념을 중요시 함

  • 일급 함수 (First-class function) : 함수가 값처럼 취급되어 변수에 할당하거나 다른 함수에 인자로 전달하거나 함수에서 반환될 수 있는 특성

  • 고차 함수 (Higher-order function) : 함수를 다루는 함수, 함수를 인자로 받거나 함수를 반환하는 함수 (ex: map, filter, reduce)

  • 순수 함수 (Pure functions) : 같은 입력에 대해서는 항상 같은 출력을 반환하며, 부작용이 없는 함수를 의미. 순수 함수는 예측이 가능하고 테스트하기 쉽고, 코드의 안정성을 높여줌

  • 불변성, 부작용 제어, 모나드 등이 추가적인 특징

불변성이란?

  • 불변성이란 한 번 생성된 데이터의 상태가 변경되지 않는 특성을 나타내는데 한 번 값을 할당하면 그 값이 변경되지 않고 유지되는 것을 의미한다.

  • 이러한 불변성을 가진 데이터나 객체는 할당 후 변경되지 않고, 데이터에 변경이 필요한 경우 기존 값을 변경하는 대신 새로운 값을 생성한다.

  • 이렇게 불변성을 가는 데이터는 부작용이 적은데 함수가 외부 상태를 변경하지 않고 입력에만 의존한다는 것을 의미하며, 이것은 코드의 안정성을 높이고 예측 가능성을 향상시킬 수 있다.

  • 또한 여러 스레드에서 동시에 접근하더라도 데이터가 변경되지 않기 때문에 스레드 간 충돌이 발생활 확률이 적다.

모나드란?

  • 모나드란 함수형 프로그래밍에서 주로 사용되는 개념으로써 값을 감싸고 그 값을 가공하거나 변형하는 방법을 제공하는 디자인 패턴

  • 부작용을 다루거나 비동기적인 작업을 처리하기 위한 추상화

  • Swift에서는 옵셔널이 가장 일반적인 모나드의 예시

profile
꼼꼼한 iOS 개발자 /
Apple Developer Academy @ POSTECH 2기 / 멋쟁이사자처럼 앱스쿨 1기

0개의 댓글