본문 바로가기
Xcode/Swift - PlayGround

PlayGround) Closure에 대해서 알아보자 2부 (nonEscaping)

by 후르륵짭짭 2020. 7. 17.
728x90
반응형

안녕하세요 후르륵 짭짭 입니다.

오늘은 클로저의 noneEscaping 함수에 대해서 알아보려고 합니다!

 

nonEscaping은 딱 봐도 "도망칠 수 없는"으로 해석이 되져?

예! 맞습니다. nonEscaping 함수는 도망 칠수 없는 겁니다.

 

예시를 보도록 할게요

func mathFunction(one : Int , two : Int , formula : (Int,Int) -> (Int)) -> Int{
    let result = formula(one,two)
    print("결과를 받았다")
    return result + 10
}

이 함수의 구조를 보도록 하겠습니다.

one과 two 로 Int 형을 받는 두개의 변수가 있네요. 그리고 정수 두개를 받아서 Int를 반환하는 formula 함수가 있고 최종적으로 Int를 반환해야하군요 ㅎㅎㅎㅎ

그리고 result 에 formula 값을 받고 result + 10 을 한 것을 반환 하는 군요

print(mathFunction(one: 10, two: 5, formula: addTwoNumber))

이렇게 함수를 호출하면 결과는 25가 나옵니다!

 

순서가 어떻게 되는 걸까요?

let addTwoNumber : (Int, Int) -> (Int) = { (one : Int, two : Int) -> (Int) in
	(2)
    print("덧셈")
    
    (3)
    return one + two
}

func mathFunction(one : Int , two : Int , formula : (Int,Int) -> (Int)) -> Int{
    	(4)		(1)
    let result = formula(one,two)
    (5)
    print("결과를 받았다")
    (6)
    return result + 10
}

	(7)
print(mathFunction(one: 10, two: 5, formula: addTwoNumber))

처음에 matFunction이 호출 되면 

formula 함수를 호출 시킵니다 -> 그리면 formula가 addTwoNumber로 되어 있으니 addTwoNumber를 수행하고 결과를 반환 합니다.

-> 그런 다음 나머지 5 번과 6번을 수행하고 최종결과 7번 을 하게 됩니다.

 

그러면 결과는 어떻게 나올 까요?

덧셈
결과를 받았다
25

이렇게 나옵니다!

순서가 일정하죠??

이게 nonEscaping 클로저 입니다!

어디로 도망 갈 수가 없어요!

 

이번에는 다른 예시를 보겠습니다.

print(mathFunction(one: 10, two: 5, formula: { (one, two) -> (Int) in
    return (one * two) * 1000
}))

만약에 우리가 formula를 addTwoNumber 가 아닌 저렇게 직접 선언 하면 어떻게 될까요?

결국은 같습니다.

nonEscaping 이기 때문에, 순서는 같지만 클로저의 장점은 항상 다르게 내용을 정할 수 있다는 거죠!

그래서 많은 고차함수들이 저렇게 클로저로 구성되어 있는 거랍니다!!

 

잘 설명이 된지 모르겠지만 ㅎㅎㅎ

큰 도움이 됐으면 합니다!!

모두모두 즐코하세욧!!!

728x90
반응형

댓글