boraBong

[Swift] 함수형 프로그래밍이란? 본문

iOS/Swift

[Swift] 함수형 프로그래밍이란?

보라봉_ 2020. 12. 8. 03:45
728x90

 

 

안녕하세요💜 보라봉입니다 :)

오늘은 스위프트 언어의 특징 중 하나인 함수형 프로그래밍에 대해 알아보겠습니다 ㅎㅎ!!

 

 

 

스위프트는 함수형 프로그래밍 패러다임지향합니다.

 

그렇다면, 대체 함수형 프로그래밍이 뭐길래? 스위프트가 함수형 프로그래밍을 차용했는지 알아보도록 하겠습니다.

 


 

📚 함수형 프로그래밍이란?

  • 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 프로그래밍

  • 값이나 상태의 변화보다는 함수 자체의 응용을 중요하게 여긴다.

  • 코드 이해와 실행 결과의 관점에서, 순수하게 함수에 전달된 인자 값만 결과에 영향을 주기 때문에 상태 값을 갖지 않고 순수하게 함수만으로 동작

    • 👉🏻 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있다.

  • 프로그램 동작 과정에서 상태(값)가 변하지 않으면 함수 호출이 각각 상호 간섭 없이 실행되므로 병렬처리를 할 때 부작용이 거의 없다는 장점이 있다.

    • 👉🏻 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업할 수 있기 때문에 대규모 병렬처리에 큰 강점을 가짐.

 

 

 

 

또 다른 함수형 프로그래밍의 특징으로는 함수를 일급 객체로 다룬다는 점인데요,

일급 객체라는 단어는 조금 생소한데

 

과연 일급 객체란 무엇일까요? 그리고 그 일급 객체는 어떠한 조건을 갖고 있을까요????🧐




 

📚 일급 객체의 조건

  • 전달인자로 전달할 수 있다

  • 동적 프로퍼티 할당이 가능하다

  • 변수나 데이터 구조 안에 담을 수 있다

  • 반환 값으로 사용할 수 있다

  • 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별가능하다

 

 

  •    📌 정수, 실수 등은 거의 모든 언어에서 일급 객체의 조건을 갖추지만, 함수는 대부분 그렇지 않죠.
    • 그러나 스위프트 언어의 함수는 이러한 일급 객체의 조건을 모두 갖출 수 있기 때문에 함수를 일급 객체로 취급합니다 !!    
  •  📌 결국 함수가 일급 객체가 된다는 의미는!
    • 다양한 종류의 함수를 호출, 전달, 반환하는 등의 동작만으로도 프로그램을 구현할 수 있다는 것이랍니다 ㅎㅎ

 


 

📚 명령형 프로그래밍과 함수형 프로그래밍 코드로 한눈에 비교하기

 

❗️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
Comments