티스토리 뷰

함수형 프로그래밍 : 부수 효과를 제거하여 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임
- 부수 효과 : 외부 상태를 변경하거나 함수로 들어온 인자의 상태를 직접 변경하는 것
- 순수 함수 : 부수효과가 없는 함수. 함수에 동일한 인자가 주어졌을 때 항상 같은 값을 리턴하는 함수 + 외부의 상태를 변경하지 않는 함수를 뜻함. 항상 같은 값을 리턴하기 위해서는 외부의 값을 참조하지 않는것도 당연합니다.

 

예를 들어보겠습니다.

 

1. 순수함수

func sum(num1: Int, num2: Int) -> Int {
	return num1 + num2
}

이것은 어떻게 값을 넣어도 항상 같은 값이 나오게 됩니다.

그렇죠? 당연하죠?

 

2. 순수하지 않은 함수

let num3 = 10
func sum(num1: Int, num2: Int) -> Int {
	return num1 + num2 + num3
}

순수하지 않습니다. num3을 전역변수라고 가정을 한다면 결과 값은 num3의 값에 따라서 변경이 되게 됩니다.

 

3. 부수 효과

var num3 = 10
func sum(num1: Int, num2: Int) -> Int {
    num3 = 20
    return num1 + num2 + num3
}

function을 호출하였는데 외부의 값이 변경이 되게 됩니다. 순수하지 않습니다.

 

4. 파라메터의 값을 변경해도 그렇습니다.

func sum( num1: inout Int, num2: Int) -> Int {
    num1 += 10
    return num1 + num2
}

var a = 10
sum(num1: &a, num2: 20)

print(a)
// 20

호출만 했는데 호출되는 쪽의 값이 변경되게 됩니다. 좋지 않군요.

 

5. 위의 경우를 순수하게 만들기 (솔찍히 inout을 없애서 순수하게 만들면 됩니다... )

func sum( num1: inout Int, num2: Int) -> Int {
    var temp = num1
    temp += 10
    return temp + num2
}

var a = 10
sum(num1: &a, num2: 20)

print(a)
// 10

 

결론. 물론 이렇게 만드는게 어려울수도 있습니다.

Rx를 이용하여서 람다식에서 외부의 값을 받아들여서 사용하는것 등등...

어려운 부분들이 많아서 외부의 값을 그냥 가져와서 사용하거나 내부에서 외부의 값을 변경하는 작업들을 할수가 있습니다.

 

다만. 모듈화 수준이 높으면 재사용성이 높고 좋은 프로그래밍이라 할 수 있기에 이렇게 개발하는것을 목표로 삼는것이 좋을것입니다.

'Mobile' 카테고리의 다른 글

Coding 중괄호 종류. 편애 약간 있음...  (0) 2019.08.21
OAuth, xAuth  (0) 2018.06.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 31
글 보관함