안녕하세요, 루피입니다.
저번 글에서는 함수형 프로그래밍의 의미에 대해 알아보았는데요. 오늘은 저번에 말씀 들렸던 거처럼 함수형 프로그래밍의 특징과 명령형 프로그래밍과의 차이점에 대해 살펴보겠습니다. 바로 시작합니다.
함수형 프로그래밍 특징
- 순수 함수 : 동일한 입력 값에 대해 항상 동일한 출력값을 반환하며, 외부 상태를 변경하지 않는 함수. (저번 글에서 수학적 함수랑 같은 의미라고 말씀 들렸습니다.
- 불변성 : 데이터는 한 번 생성되면 변경되지 않습니다. (저번 글에서 원본 데이터를 변경하기보다는 하나의 데이터를 새로 생성하는 방식을 의미하는 것 같습니다.)
- 고차 함수 : 함수를 인자로 받거나 반환값으로 사용하는 함수입니다. (일급 함수의 개념입니다.)
- 참조 투명성: 동일한 입력값에 대해 항상 동일한 결과를 반환합니다.
- 선언형 프로그래밍 스타일: "어떻게??"가 아닌 "무엇을??" 할 것인지에 초점을 둡니다.
함수형 프로그래밍의 장점
1. 코드 간결성
- 고차 함수를 활용해 반복 작업을 간단하게 표현 가능.
- 예: `map`, `filter`, `reduce`와 같은 함수 사용.
2. 테스트 용이성
- 순수 함수는 부작용이 없으므로 테스트가 쉽고 예측 가능성이 높음.
3. 병렬 처리 용이성
- 불변성과 참조 투명성 덕분에 멀티스레드 환경에서도 안전하게 동작.
4. 재사용성 및 모듈화
- 작은 단위의 함수를 조합하여 복잡한 로직 구현 가능.
명령형 프로그래밍 VS 함수형 프로그래밍
| 특징 | 명령형 프로그래밍 | 함수형 프로그래밍 |
| 코드 스타일 | 상태 변경과 명령어를 순서대로 나열 | 순수 함수와 선언적 스타일로 작성 |
| 상태 관리 | 상태가 계속 변경됨 | 상태가 불변 |
| 병령 처리 | 상태 충돌 가능성으로 인해 복잡 | 불변성과 순수 함수 덕분에 병렬처리에 유리 |
| 예제 코드 (짝수 합계) | for | filter |
한번 코드 예제를 통해 스타일 차이를 보겠습니다!
명령형 스타일
var sum = 0
let numbers = [1, 2, 3, 4, 5]
for number in numbers {
if number % 2 == 0 {
sum += number
}
}
print(sum) // 출력: 6
함수형 스타일
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.filter { $0 % 2 == 0 }.reduce(0, +)
print(sum) // 출력: 6
차이가 느껴지시나요? 훨씬 간단해졌고, 무엇을 하려 하는지 파악하기 쉬워지지 않았나요?
그럼 여기서 저는 한 가지 의문이 들더라고요 그러면 for문을 직접 구현하는 거는 Swift스럽지 않은거네?
Swift는 함수형 프로그래밍이니깐!!
음....정답은 없다는 것이 저의 결론입니다.
물론 함수형 프로그래밍 형식을 따라가는 것이 좋지만, 결국 프로그래밍 방식에는 장단점이 있을 뿐, 옳고 그름은 없는 거 같습니다. 명령형 형식의 코딩이 협업하는데 더 용이할 거 같고, 이해하기 쉬울 거 같다면 명령형 방식을 쓰는 것이고, 단순하고 간결하게 처리해도 문제가 없다면 함수형 프로그래밍을 사용하는 게 맞는 거 같습니다.
하지만 결국 함수형 프로그래밍과 객체 지향을 강조하는 Swift를 Swift스럽게 사용하기 위해서는 지식을 쌓아 놓는 게 좋을 거 같습니다!!
오늘도 화이팅입니다!
'iOS > Swift' 카테고리의 다른 글
| [Swift] 스위프트에서 KVO 사용하기 (0) | 2025.01.16 |
|---|---|
| [Swift] Singleton(싱글톤)을 이용해 공유 자원 관리 (0) | 2025.01.15 |
| [Swift] 함수형 프로그래밍(Functional Programming) 1/2 (1) | 2025.01.13 |
| [Swift] 클로저(Closure) 2/2 (0) | 2025.01.13 |
| [Swift] 클로저(Closure) 1/2 (5) | 2025.01.13 |