<h1><center> Functional Progamming </center></h1> ###### tags: `💻 TIL`,`Computer Science` ###### date: `2024-01-3017:21:33.284Z` > [color=#724cd1][name=데릭] > [함수형 프로그래밍 - 위키백과](https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) > [망나니개발자 블로그] (https://mangkyu.tistory.com/111) ## Programming Paradigm 함수형 프로그래밍 학습에 앞서, 프로그래밍 패러다임에 대해 알 필요가 있다. > 프로그래밍 패러다임은 개발자에게 프로그래밍 관점을 갖게 하고 어떻게 코드를 작성할 지 결정하는 역할을 한다. 1. 명령형 프로그래밍: 무엇을 할 것인지 보다 어떻게 할 것인지를 설명하는 방식이라 할 수 있다. - 절차지향 프로그래밍 - 객체지향 프로그래밍 2. 선언형 프로그래밍: 어떻게 할 것인지 보다 무엇을 할 것인지 설명하는 방식이다. - 함수형 프로그래밍: 순수 함수를 조합해 소프트웨어를 만드는 방식을 말한다. ## Functional Programming > 함수형 프로그래밍은 거의 모든 것을 순수 함수로 나눠 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수성이 좋다. 대표적으로는 SwiftUI가 있다. > Functional Programming is programming without assignment satements - Rober C.Martin - 함수형 프로그래밍은 명령형 프로그래밍에서처럼 변수에 값을 할당하지 않는 프로그래밍을 말한다. ```swift // map 함수 정의: 컬렉션의 각 요소에 클로저를 적용하여 새로운 컬렉션을 반환 func myMap<T>(_ array: [T], _ transform: (T) -> T) -> [T] { var result = [T]() for element in array { result.append(transform(element)) } return result } // 사용 예제: 각 숫자를 제곱하는 클로저를 전달하여 새로운 배열 생성 let numbers = [1, 2, 3, 4, 5] let squaredNumbers = myMap(numbers) { $0 * $0 } print(squaredNumbers) // 출력: [1, 4, 9, 16, 25] ``` **함수형 프로그래밍 특징** 1. 순수 함수(Pure Function) - 함수의 결과는 오로지 입력에만 의존하며, 같은 입력이 주어지면 항상 같은 결과를 반환하는 순수 함수를 사용한다. Side Effect가 없고 예측 가능한 동작을 보장한다. 2. Immutability - 한번 생성된 데이터를 변경하지 않고 새로운 데이터를 생성해서 사용한다. 3. First-Class - First-Class는 함수를 다른 함수에 인자로 전달하거나 함수를 반환하는 함수를 말한다. 4. Referential Transparency - 동일한 입력에 대해 항상 동일한 출력을 반환하는 함수는 참조적 투명성을 가진다. 5. 모나드(Monads) - 모나드는 함수형 프로그래밍에서 side effect를 조절하고 예외 처리, 비동기 작업, 상태 변화 등을 추상화하는데 사용된다. **NOTE** > Monads: 핵심은 값을 래핑하고 변환 함수를 통해 그 안의 값을 조작할 수 있는 컨텍스트를 제공하는 것이다.