티스토리 뷰

나름 프로그래밍?/Swift

Closure

-Dong- 2015. 6. 2. 23:14

  이제 드디어 Closure ㅠ_ㅠ

  Swift 라고 해서 새로운 언어가 나왔지만 언어가 새롭다고 해서 기존의 개념이 바뀐건 아니다

  함수형 언어라고는 하나 이러한 개념들은 60년대에 이미 논의가 되었더란다(-_-;)

  그게 중요한게 아니고... 이렇기 때문에 새로나왔다고 해서 새로운 개념이 막막 나오고 그런건 아니다

  Closure 라는 용어는 생소해도 Objective-C 에서 주구장창 써대던 Block 코딩이라고 생각하면 편하다


  여기저기서 Closure 의 예제로 가장 만만하게 쓰이는 sorted 의 코드로 보면 이해하기 편하다

  그리고.. 용어가 참 많이 있던데 예를들면 Inferring Type From Context, Implicit Returns from Single-Expression Closures, Shorthand Argument Names, Operator Functions 이런것들......... 굳이 번역까지 해서 용어적으로 알고 있어도 괜찮다고 보지만 굳이 그럴게 있나 싶다 일단 개념적으로만 이렇게 된다 알고 있는것도...

  굳이 우리 서로 변수형 다 알고 있는 사이에 다 적어줄 필요가 있나?


  뻔히 return 시키는게 bool 인거 아는게 return 적어줄 필요가 있나?(근데 이건 bool 만 되니 유의)


  뻔히 t1이니 parameter1 이니 해봐야 인자값들 받아올 뿐인데 이름 적어줄 필요있나?


  마지막 단계는 겁나 간편해 보이긴 한데 이런것들은 사용에 제한이 있다는 것에 주의하자


  이어서 Trailing Closures 라는게 등장한다

  생긴건 뭔가 쫌 희안하게 생겨서 쫌 헷갈렸는데(번역된 서적보다 원문이 더 쉬운 마법의 개념) 그냥 sorted 의 경우에서 보자면 마지막으로 전달받는 인자가 Closure 이고 쫌 길다 라고 하면 유용하게 쓰일지도(?) 모른단다

  뭐 그냥 안에 있던게 밖으로 나왔다

  

  이제 Closure 항목의 마지막 단계 Capturing Values 가 등장한다(이거 언듯 잘못보면 헷갈린다 -___-)

  지금까지는 얄팍하게 문서에 있던 예제를 야금야금 바꿨지만 이건 그대로...

  이러니 저러니 해도 이해가 젤 중요한거 아니겠는가..  뭐 그런 의미에서 makeIncrementer 의 리턴형에 주목하자

  () -> Int 란다 근데 중요한게 블럭 안을 보면

  var runningTotal 이라면서 변수가 하나 선언 되어 있고 그 변수를

  function incrementer() 함수 안에서 사용하고 있다

  바로 이렇게 중첩된 함수가 존재할때 그 내부-incrementer()-에서 외부 변수-runningTotal-사용시 필요없을때 까지 유지한다는 거다

  어렵게 생각하지 말고 그 아래에

  let incrementByTen 을 보면 makeIncrementer(forIncrement: 10) 이라는게 있다

  incrementByTen 은 함수를 반환 받고 이 반환받은 함수가 바로 makeIncrementer 내부에 있는 incrementer 다

  그래서 incrementByTen 이 해제 되기 전에는 내부의 incrementer 가 살아있고 얘가 참조하고 있는 외부의 runningTotal 이 살아있구나 라고 보면 땡!





'나름 프로그래밍? > Swift' 카테고리의 다른 글

Struct  (0) 2015.08.03
Enum  (0) 2015.08.03
Function  (0) 2015.05.25
Dictionary  (0) 2015.05.19
Array  (0) 2015.05.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함