일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- swift gRPC
- swift 연속된 부분 수열의 합 풀이
- swift 연속된 부분 수열의 합
- swift algorithm
- rxswift
- swift codility
- swift dfs
- 1 2 3 더하기 풀이
- MVVM
- 백준 2xn 타일링
- ac 투포인터
- swift 알고리즘
- swift ac 풀이
- ac swift 풀이
- swift 2xn 타일링 백준
- 연속된 부분 수열의 합 swift
- swift 2xn 타일링
- swift ac 문제풀이
- 123 더하기 풀이
- swift 프로그래머스
- swift 백준 9095
- iOS Charts
- swift 9095 풀이
- 연속된 부분 수열의 합 투포인터
- ios
- swift ac
- ac 구현 풀이
- swift 2xn 타일링 풀이
- swift
- 백준 2xn 타일링 풀이
- Today
- Total
boraBong
[Swift] 함수형 프로그래밍이란? 본문
안녕하세요💜 보라봉입니다 :)
오늘은 스위프트 언어의 특징 중 하나인 함수형 프로그래밍에 대해 알아보겠습니다 ㅎㅎ!!
스위프트는 함수형 프로그래밍 패러다임을 지향합니다.
그렇다면, 대체 함수형 프로그래밍이 뭐길래? 스위프트가 함수형 프로그래밍을 차용했는지 알아보도록 하겠습니다.
📚 함수형 프로그래밍이란?
-
프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 프로그래밍
-
값이나 상태의 변화보다는 함수 자체의 응용을 중요하게 여긴다.
-
코드 이해와 실행 결과의 관점에서, 순수하게 함수에 전달된 인자 값만 결과에 영향을 주기 때문에 상태 값을 갖지 않고 순수하게 함수만으로 동작
-
👉🏻 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있다.
-
-
프로그램 동작 과정에서 상태(값)가 변하지 않으면 함수 호출이 각각 상호 간섭 없이 실행되므로 병렬처리를 할 때 부작용이 거의 없다는 장점이 있다.
-
👉🏻 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업할 수 있기 때문에 대규모 병렬처리에 큰 강점을 가짐.
-
또 다른 함수형 프로그래밍의 특징으로는 함수를 일급 객체로 다룬다는 점인데요,
일급 객체라는 단어는 조금 생소한데
과연 일급 객체란 무엇일까요? 그리고 그 일급 객체는 어떠한 조건을 갖고 있을까요????🧐
📚 일급 객체의 조건
-
전달인자로 전달할 수 있다
-
동적 프로퍼티 할당이 가능하다
-
변수나 데이터 구조 안에 담을 수 있다
-
반환 값으로 사용할 수 있다
-
할당할 때 사용된 이름과 관계없이 고유한 객체로 구별가능하다
- 📌 정수, 실수 등은 거의 모든 언어에서 일급 객체의 조건을 갖추지만, 함수는 대부분 그렇지 않죠.
- 그러나 스위프트 언어의 함수는 이러한 일급 객체의 조건을 모두 갖출 수 있기 때문에 함수를 일급 객체로 취급합니다 !!
- 📌 결국 함수가 일급 객체가 된다는 의미는!
- 다양한 종류의 함수를 호출, 전달, 반환하는 등의 동작만으로도 프로그램을 구현할 수 있다는 것이랍니다 ㅎㅎ
📚 명령형 프로그래밍과 함수형 프로그래밍 코드로 한눈에 비교하기
❗️doSomething 함수와 doAnotherThing 함수를 모두 처리하고 싶을 경우
<명령형 프로그래밍의 예>
class CommandProgramming {
//명령형 프로그래밍
func doSomething(){
print("doSomething")
}
func doAnotherThing(){
print("doAnotherThing")
}
func executeAll(){
doSomething()
doAnotherThing()
}
}
//호출부
executeAll()
<함수형 프로그래밍의 예>
class MethodProgramming {
func doSomething(){
print("do something")
}
func doAnotherThing(){
print("do another thing")
}
func execute(tasks:[() -> Void]){
for task in tasks {
task()
}
}
}
//호출부
execute(tasks: [doAnotherThing, doSomething])
- 📌 함수형 프로그래밍 안에서는 함수가 일급 객체이므로 함수를 전달인자 또는 반환 값으로 사용할 수 있습니다.
- 그래서 execute(tasks: [doAnotherThing, doSomething]) 처럼
- doSomething과 doAnotherThing 함수를 전달인자로 사용할 수 있는 것이죠!!!!!!!!👍🏻👍🏻
명령형 프로그래밍 | 함수형 프로그래밍 | |
프로그래머의 초점 | 작업 수행 알고리즘 상태의 변경 추적 |
원하는 정보 필요한 변환 |
상태 변경 | 중요함 | 없음 |
실행 순서 | 중요함 | 중요도가 낮음 |
주요 흐름 제어 | 제어문(반복문, 조건문 등) 함수(메소드)호출 |
순환(재귀)함수 호출 등의 함수 호출로 제어 |
주요 조작 단위 | 클래스나 구조체의 인스턴스 | 함수 |
👉🏻 표로 간단하게 비교해 보자면 명령형 프로그래밍과 함수형 프로그래밍은 이러한 차이를 가진다고 정리할 수 있겠네요!! :)
마지막으로, 그래서 함수형 프로그래밍을 사용하면 저희는 어떤 장점을 얻을 수 있기에 함수형 프로그래밍~~ 함수형 프로그래밍~~~ 하는 걸까요????
📚 함수형 프로그래밍의 장점
-
여러가지 연산 처리 작업이 동시에 일어나는 프로그램을 짜기 쉽다.
-
멀티코어 혹은 여러 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다.
-
상태변화에 따른 부작용에서 자유로워지므로 순수하게 기능 구현에 초점을 맞춰 설계가 가능하다.
따라서 때에 따라 적절히 적재적소에 객체지향과 함수형 프로그래밍을 섞어 프로그래밍을 한다면 필요한 기능에 맞게 최적의 성능을 발휘할 수 있고, 생산성도 극대화할 수 있는 프로그램을 만들 수 있습니다 :)
여기까지! 보라보라봉과 함수형 프로그래밍에 대해 알아봤습니다 ㅎㅎ
정리 내용은 '야곰'님의 스위프트 프로그래밍 서적을 참고했습니다:)
유익한 정보였으면 좋겠네요~~~💜
'iOS > Swift' 카테고리의 다른 글
[Swift] Regex, 정규표현식 사용하기 (0) | 2023.02.22 |
---|---|
[Swift] Swift 고차함수 문법 - Map, Filter, Reduce (0) | 2023.01.08 |
[Swift] 구조체와 클래스 (1) | 2022.04.15 |