본문 바로가기
프로그래밍/Swift

2. 함수형 프로그래밍의 특징.

by Mr-후 2019. 2. 13.
반응형

2. 함수형 프로그래밍의 특징.


함수형 프로그래밍 패러다임의 가장 큰 장점은 대규모 병렬처리가 굉장히 쉽다. 

프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임이다. 

함수 자체의 응용을 중요하게 생각한다. 

순수하게 함수에 전달된 인자 값만 결과에 영향을 주며, 상태 값을 갖지 않고 순수하게 함수만으로 동작한다. 따라서 일정하게 같은 결과를 도출할 수 있다. 


프로그램이 동작하는 흐름에서 상태(값)가 변하지 않으면 함수 호출이 각각 상호 간섭 없이 배타적으로 실행되므로 병렬처리할 때 부작용(side-effect)이 거의 없다. 프로세스 혹은 스레드 별로 특정 값을 참조하거나 변경하기 위해서 락을 걸거나 대기할 필요가 없기 때문에 대규모 병렬처리가 쉽다. 

함수형 프로그래밍의 큰 특징은 함수를 일급 객체(First-class Citizen)로 다룬다는 점. 

일급 객체가 되기 위한 조건. 

  • 전달인자(Argument)로 전달할 수 있다. 
  • 동적 프로퍼티(Property) 할당이 가능. 
  • 변수나 데이터 구조 안에 담을 수 있다. 
  • 반환 값으로 사용할 수 있다. 
  • 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있다. 


정수, 실수 등은 거의 모든 언어에서 일급 객체의 조건을 갖출 수 있지만 대부분의 함수는 그렇지 않은데 스위프트에서는 일급객체로 취급한다. 함수가 일급 객체가 된다는 의미는 다양한 종류의 함수를 호출하고, 전달하고 반환하는 등의 동작만으로도 프로그램을 구현할수있다는 뜻이다. 


이것은 자바스크립트나, 안드로이드에서 콜백 리스너를 함수를 등록하는거와 비슷한 개념인 듯 하다. 만약 이 개념을 제대로 이해한다면 내 판단에 함수형 프로그래밍의 특징을 제대로 활용할 수 있다고 판단된다. 


이론적인 내용만 정리해서 포스팅 함 (야곰님이 지은 스위프트 프로그래밍 중에서) 

//함수형 프로그래밍 패러다임 

func do() {

print("do")

}

func todo() {
    print("todo")

}


func execute(tasks: [()-> Void]) {

for task in tasks {

task() //do or todo 

}

}

excute(tasks: [do, todo])


func sum(first: Int) -> ((Int) -> Int) {

return { second in first + second }

}

sum(first: 10)(5) 


* 커링(Currying)기법 : 여러개의 매개변수를 갖는 함수를 매개변수 하나를 갖는 함수의 나열로 표현하는 방법. 


* 함수형 프로그래밍이 가능하도록 버전이 업데이트 된 언어: 자바 8, C# 3.0 


Do you understand?






반응형