2. 중첩 함수(Nested Function)
• Swift는 C/C++와는 달리 함수의 내부에 함수를 만들 수
있다.(중첩함수)
• 내부의 중첩된 함수는 바깥쪽(중괄호 넘어) 함수에 선언
된 변수를 사용할 수 있다.
• 중첩함수의 호출은 함수 내부에서만 가능하므로 내부적
으로 은닉이 가능하다
7. 중첩 함수(Nested Function)
함수 funcA: 외부함수라 함
중첩 함수 funcB: funcA의 내부함수
() -> Int
return a
var a = 10
a = a + 10
8. 중첩 함수(Nested Function)
함수 funcA: 외부함수라 함
중첩 함수 funcB: funcA의 내부함수
() -> Int
return a
funcB는 외부함수 funcA의 값 a을
읽어(캡쳐) 처리할 수 있다.
내부함수는 외부함수가 실행되는
순간 생성되고, 종료되는 순간
소멸된다
var a = 10
a = a + 10
15. 중첩 함수(Nested Function)
• 중첩함수를 반환하여 이 함수를 함수 외부에서 사용할 수
도 있다
makeInc1()의 반환값을 참조하는 increment 변수
increment 변수는 중첩함수 addOne()를 참조한다
makeInc1() 함수는 addOne() 함수를 반환
19. runningTotal 변수는 호출될때마다
amount만큼 증가되는데
runningTotal 변수를 바깥함수로부터
참조 캡쳐하였기 때문이다. 이 변수는
incFive, incTen에 의해 각각 다른
기억장소에 캡쳐되어 있다
중첩 함수-변수의 참조 캡쳐
20. 내부함수 참조 변수
• 위의 예에서 내부함수 incrementor()는 외부함수
makeInc2()가 호출될때 생성되어 외부함수의 호출이 종
료되면 소멸하도록 설계되었다.
• 그러나 incFive, incTen이라는 외부참조변수가
incrementor()를 참조하여 생명이 유지되는 것을 확인할
수 있다.
• 외부에서 참조하는 변수나 상수가 있을 경우 내부함수는
참조되어 생명이 유지된다
21. 중첩 함수(Nested Function)
함수 FuncA
파라미터 : 1개의 배열, 1개의 FuncB(Int -> Bool)
retrun Bool(true or false)
함수 FuncC(FuncB를 엑세스 한 파라메터)
(Int->Bool)
반환값 : Bool형을 반환
retrun Bool(True of false)
22. 중첩 함수(Nested Function)
함수 FuncA
파라미터 : 1개의 배열, 1개의 FuncB(Int -> Bool)
retrun Bool(true or false)
함수 FuncC(FuncB를 엑세스 한 파라메터)
(Int->Bool)
반환값 : Bool형을 반환
retrun Bool(True of false)
함수 FuncB
(Int->Bool)
retrun Bool(true or false)
23. 중첩 함수(Nested Function)
함수 FuncA
파라미터 : 1개의 배열, 1개의 FuncB(Int -> Bool)
retrun Bool(true or false)
함수 FuncC(FuncB를 엑세스 한 파라메터)
(Int->Bool)
반환값 : Bool형을 반환
retrun Bool(True of false)
함수 FuncB
(Int->Bool)
retrun Bool(true or false)
24. 중첩 함수(Nested Function)
함수 FuncA
파라미터 : 1개의 배열, 1개의 FuncB(Int -> Bool)
retrun Bool(true or false)
함수 FuncC(FuncB를 엑세스 한 파라메터)
(Int->Bool)
반환값 : Bool형을 반환
retrun Bool(True of false)
함수 FuncB
(Int->Bool)
retrun Bool(true or false)
함수가 매개변수가 되어
전달되는 경우
35. 중첩 함수(Nested Function)
함수 FuncB
중첩 함수 condition
함수 FuncA
condition은 함수의 매개변수
Int형을 매개변수로 사용하고 Bool을 반환
36. 중첩 함수(Nested Function)
함수 FuncB
중첩 함수 condition
함수 FuncA
condition은 함수의 매개변수
Int형을 매개변수로 사용하고 Bool을 반환
37. 정리
• Swift는 함수의 내부에 함수를 만들 수 있다.이를 중첩함
수라고 한다
• 내부의 중첩된 함수는 바깥쪽(중괄호 넘어) 함수에 선언
된 변수를 사용할 수 있다.
• 중첩함수의 호출은 함수 내부에서만 가능하므로 내부적
으로 은닉이 가능하다는 장점이 있다.
• 함수는 매개변수로도 사용될 수 있고 반환타입으로 사용
할 수 있다