Skip to content

조회 수 51 추천 수 6 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

출판했던 책 속편을 쓰다 개인 사정에 의해 아이폰 데브의 온라인 강좌로 전환합니다. 제 글이 취향에 맞는 분들이 많이 계실지는 모르지만, 늘 공부하는 개발자의 태도 만큼은 공통 분모로 생각하기에 편히 시작해 봅니다. 미리 준비 한 부분 중 정말 필요한 부분만 올리고 틈틈히 재 정리하며, 저도 수시로 보려고 합니다. 가르치는 스킬과 직접 만들 줄 아는 스킬은 확실히 다르니까요. 쓴 사람도 늘 같은 칼을 가는 것과 같은 숙련이 필요한 것 같습니다.

note를 진행하며 언젠가 깊이 있게 봐야 할 부분이 나오면, 다 함께 토론해 봤으면 합니다. 저 역시 실무 프로그래머로 계속 일하며 업데이트 할테니 댓글로 많은 질책, 의견, 수정, 단순 느낌 등 easy 하게 feedback 부탁드립니다. 불필요한 이런 서론도 시간이 지나면 정리하겠습니다.

-------------------------------------------------------------------------------------------------------------------

 

REST API를 쓴다면 필시 Alamofire를 이용하리라 생각한다. 클로저를 이용하면, DispatchQueue를 이용하지 않고 동기화 할 수 있다. 우선, 자연스레 알기 위해 이미 우리가 알고 있는 기초를 짚어 보자. 기초 1, 2, 3를 짚어보면 자연스레 이해가 될 것 같다.

 

  1. {} 의 타입은 () -> () 이다.

 

수학에서의 함수 y = f(x),

프로그래밍에서의 함수 f(x),  f는 함수 이름 () 안은 인자의 형태를 취한다.

 

프로그래밍 언어마다 자료형 타입이 있다. 많은 프로그래밍 언어가 자료형에 신경 쓰지 않고 프로그래밍을 하도록 시도하고 있다. 함수 이름이 메모리에서 시작점을 말한다면, 자료형 타입은 메모리에서 확보된 공간 끝 점을 알기 위해 필수적으로 필요하다. 

 

Swift에서 함수의 자료형 타입은 ()->() 이다.

정의는 func f(_ x:자료형) -> 리턴값 { }   _ 는 파라미터 별칭 생략의 뜻.


익명 함수는 단순히  {}  로 쓴다.

func f(_ x:자료형) -> 리턴값 { } 이 아닌 {} 로 정의 된다는 뜻이다.

따라서 익명 함수는 class나 enum, struct 처럼 top-level 에 위치할 수 없다.

이제 {} 의 타입은 ()->() 라는 말이 이해 할 수 있을 것 같다.

풀어쓰면, 익명 함수 타입은 함수로 정의 된다는 말이다. 말 장난 같지만, 함수를 정의할 때는 {} 로 정의하고, 함수의 타입을 정의할 때는 ()->()로 정의한다고 보면 되겠다.

 

스위프트에서는 익명 함수를 클로저, closure 라 부른다. 멀티 랭귀지를 하는 프로그래머 입장에서는 함수 포인터로 보고 제약 사항을 알아두는 것이 더 편한 것 같지만 로마에 가면 로마법을 따르라고 하니 클로저라고 하겠다.

함수를 실행 할 때에는 뒤에 () 를 붙여 준다.

어떤 A 함수를 실행하라.

         A()

func B(_ a: Int, _ b: Int) 함수를 실행하라.

         B(1, 2)

 

-------------------------------------------------------------------------------------------------------------------

  1. 함수의 파라미터로 함수를 정의하고, 함수를 인자로 받는다.

 

이미 플랫폼 프로그래밍, 리눅스 커널 프로그래밍에 30년 넘게 이용되어진 방법이다. 클로저, 일급 함수 등 다른 이름이 있지만 함수 포인터가 오래된 이름이다. Obj-C에서 selector로 자주 쓰였던 함수포인터는 함수를 인자로 넘길 수 있었다. Swift에서는 이를 클로저라 부른다. Swift 버전이 5점대에 이르렀지만 selector로는 여전히 @objc 셀렉터가 더 잘 작동되는 것은 많이 아쉬운 점이다. first, second 함수를 인자로 받아, 해당 인자(함수)를 실행하는 함수를 만들어라.

 

func testT(_ first: ()->(), _ second: ()->()) { 

first()

second()

}

 

testT를 호출할 때 인자에 바로 익명 함수{} 를 넣어 보아라

testT( { print(“first”) }, { print(“second”) })

함수의 본체(익명함수)가 인자로 들어가고 파라미터에 붙은 ()에 의해 실행 된다.

 

 

Swift에서는 closure가 다양하게 표현식이 있다.

testT( { print(“first”) }) { print(“second”) }

처럼 이미 ()를 닫아 버리고 두 번째 인자를 쓸 수 있다.

 

import UIKit

func testT2(_ first: ()->()) {

    first()

}

testT2({ print("iPhone")}) // 첫 번 째, 익숙한 모습

testT2 { print("DEV") } // 두 번 째, () 없앤모습

testT2() { print("lover") } //  세 번 째, () 뒤에 


함수의 파라미터(parameter)가 함수()->()로 정의되어 있었기 때문에, 함수 형태인 {} 를 인자(argument)로 넣어 주었다.

 

-------------------------------------------------------------------------------------------------------------------

 

  1. 함수 실행()  으로 시퀀스를 정한다.

 

getJSON(_ whatUwant2execute : @escaping () -> () ) { Alamofire.request(.GET, "http://announcement.vassy.net/api/AnnouncementAPI/Get/").responseJSON {

 (Response) -> Void in     // checking if result has value    

   if let value = Response.result.value {         

    let json = JSON(value)         

    whatUwant2execute()        

    .        

    .        

    .

then ... codes ... will be executed on that point.

 

중급 프로그래머에게 @escaping 외 굳이 더 설명은 필요 없을 것 같다. @escaping 키워드는 함수가 미리 종료한 후라도 실행 안정성을 보장한다. 함수의 실행 종료 시각 예측이 어렵다면 실무에서는 무조건 넣어준다.

 

함수 타입

 

()->()를 C의 typedef 처럼 T로 치환하면 

(T)->() 는 함수를 파라미터로 가지는 함수를 말한다.

 

이를 풀어 쓰면,

(()->())->() 이다.

 

그래서 typeT를 받는 typeA의 type은 (()->())->() 가 된다.

 

import UIKit

 

func testT(_ first: ()->()) {

    first()

}

 

testT({ print("iPhone")}) // 첫 번 째, 익숙한 모습

testT { print("DEV") } // 두 번 째, () 없앤모습

testT() { print("LOVER") } //  세 번 째, () 뒤에 

 

let typeA : ( ()->() ) -> () = testT

typeA({ print("_iPhone")}) // 첫 번 째, 익숙한 모습

typeA { print("_DEV") } // 두 번 째, () 없앤모습

typeA() { print("_LOVER") } //  세 번 째, () 뒤에 

 

Swift가 Objective-C 프로그래머에게 더 이해 되기 쉬운 것도 실무에서 필요한 기능에서 크게 벗어난

개념은 아니기 때문이다. 필자도 해당 languages 만의 철학을 이해해야 더 깊게 이해할 수 있는 누군가의

넋두리 때문에 수 년 힘들었는데, 지나보니 그렇게 말한 사람은 개발 필드를 떠났고, 프로그래밍 언어는 보통

다른 프로그래밍 언어를 했던 사람들이 만들어서 예전 언어에서 귀찮은 부분을 없애는 것 외엔 새로울 것은 없었다.

하드웨어를 새롭게 창조해서 프로그래밍 하지 않는 이상 프로그래밍은 결국, CPU와 메모리의 장난이라는 확신이 생겼다.

C/C++, Objective-C의 경험이 중요한 것도 바로 이런 이유다. 다만 시니어가 아닌 다음에야 다른 언어에 시간을 많이 할애하지는

않았으면 한다. Swift는 다른 모든 언어의 장점을 결합해서 만들려고 하고 있다. 굳이 다른 언어를 하는 것보다 한 가지 언어만 하는 것도 추천한다.

 

내과 의사도 외과 수술 공부를 했고 가능하지만 우리가 외과 수술을 내과 의사에게 받지 않는다. 변호사가 세무사, 노무사 모두를 포함하는 만능 자격증이지만 세무 관련 문제는 세무사를 찾아가는 것과 같은 이치이다. 전문가란 자신이 잘 하는 다른 것들을 포기하고 더 잘하고자 하는 것에 집중하는 것을 말한다.

 

 

 

 

 

라고 썼었는데... 필드 에서는 온갖 프로젝트를 다 해야 해서 늘 잡캐가 되는게 현실 입니다 ㅠㅠ ^^v

 

다음 Note 예고,

제목 : Atomic programming

 


  1. notice

    일반개발강좌 게시판 이용안내 (등록포인트:1,000)

    여러분만의 iOS 관련 개발 노하우를 등록해 주세요. Objective-C, Swift, 맥에서의 개발노하우 등 iOS개발에 관한 어떠한 내용이든 상관없습니다. 강좌 작성 가이드 이미지첨부는 파일첨부한후 "본문삽입버튼"으로 본문에 삽입하는 해주세요 링크는 자동으로 ...
    Date2015.02.26 By아이폰데브 Views1017
    read more
  2. No Image

    Swift Note 2 - Atomic Programming

    Atomic Programming   제가 프로그래밍을 보는 시각을 공유합니다. 아이폰 데브 회원분들이 새로운 아이디어를 떠올릴 수 있는 발판이 되었으면 합니다. 그리고 이런 커뮤니티를 지속적으로 운영해 주는 미노님께 감사드립니다.   주의 : 1 2로 나누어져 있습...
    Date2021.10.07 Byinfighter Views54
    Read More
  3. No Image

    Swift Note 1 - 함수의 타입은 ()->() 입니다.

    출판했던 책 속편을 쓰다 개인 사정에 의해 아이폰 데브의 온라인 강좌로 전환합니다. 제 글이 취향에 맞는 분들이 많이 계실지는 모르지만, 늘 공부하는 개발자의 태도 만큼은 공통 분모로 생각하기에 편히 시작해 봅니다. 미리 준비 한 부분 중 정말 필요한 ...
    Date2021.10.01 Byinfighter Views51
    Read More
  4. No Image

    Github Authentication failed 관련 이슈

    안녕하세요.    최근 Github의 인증 관련해서 이슈가 발생되어 해결 방안을 찾아보다 이곳에 공유해보면 좋을 것 같아 짧게나마 적어보려고 합니다. (이미 다들 해결하셨을 것 같기는 하지만 혹시 모를 저와 같이 찾아 헤메는 일이 없도록...)   지난 8월 13일...
    Date2021.08.15 By라임허브 Views55
    Read More
  5. No Image

    Objective-C 노하우 2가지 공유(글 업뎃 on iOS 14.6)

    =결론=   Obj-C 2.0 이상이고, 본인 프로젝트에서 메모리 사용량이 100%에 달하는 구간이 있는 앱이라면, 데이터 처리는 class 변수 말고 @property로 가고 @synthesize는 필수로 쓰세요.  왠만하면 DB(sqlite)로 데이터 넘기는 구조가 안전합니다.   =내용=  ...
    Date2021.06.11 Byinfighter Views145
    Read More
  6. No Image

    Hohyeon Moon - SwiftUI 강좌 (한글)

    업무상 iOS 12도 지원해야 해서 아직 Storyboard로 개발하고 있지만, 개인적으로 개발하려는 앱을 SwiftUI로 시작하기 위해 검색하던 중 괜찮은 강좌가 있어 소개합니다. 전체적으로 깔끔하고 간결하게 정리되어 있고 무려 한글로 작성되어 있어 처음 시작하는...
    Date2021.05.31 By프랑비 Views186
    Read More
  7. 스위프트UI 개발 로드맵

    도표로 정리된 내용이 있어서 공유합니다. 참고하세요~   SwiftUI Developer Roadmap https://karinprater.medium.com/on-the-road-to-learn-swiftui-8b26b528199c        
    Date2020.11.18 By미노 Views1438
    Read More
  8. Autolayout Content Hugging 과 Compression Resistance 정리

        개념 정리 Content hugging : 최대 크기에 대한 제한. 주어진 크기보다 작아질 수 있다. Content compression resistance: 최소 크기에 대한 제한. 주어진 크기보다 커질 수 있다. intrinsicContentSize The natural size for the receiving view, conside...
    Date2020.05.20 ByHjoon Views320
    Read More
  9. No Image

    Swfit - AST - SubstitutionMap - 1 (간단한 설명)

    Swift source : https://github.com/apple/swift.git include/swift/AST/SubsitutionMap.h   SubstitutionMap is a data structure type that describes the mapping of abstract types to replacement types, together with associated conformances to use f...
    Date2020.05.11 Bystanley Views224
    Read More
  10. No Image

    IR - Intermediate Representation

    Swift IR에 관련해서 글을 올릴려고 이것저것 찾아봤는데 기본 개념을 집고 넘어가는 게 좋을듯 해서 IR에 관해서 올립니다. 아래의 순서로 올리겠습니다. IR LLVM IR LLVM IR 문법 Swift IR Swift IR 문법 https://en.wikipedia.org/wiki/Intermediate_repres...
    Date2020.04.14 Bystanley Views160
    Read More
  11. No Image

    swift의 reduce메소드의 소스코드 분석

    swift/stdlib/public/core/SequenceAlgorithms.swift     /// Returns the result of combining the elements of the sequence using the   /// given closure.   ///   /// Use the `reduce(_:_:)` method to produce a single value from the elements   ///...
    Date2020.04.01 Bystanley Views206
    Read More
  12. No Image

    swift의 map 소스코드 분석

    swift/stdlib/public/core/Map.swift 을 따라가다 보면  swift/stdlib/public/core/Sequence.swift 에서 기본 map메소드를 정의를 하고 있습니다.       /// Returns an array containing the results of mapping the given closure   /// over the sequence's...
    Date2020.04.01 Bystanley Views273
    Read More
  13. No Image

    LINE Free Call에 iOS 다크 모드 적용하기

    라인 개발자 블로그 링크 공유합니다. 참고하세요~   LINE Free Call에 iOS 다크 모드 적용하기 https://engineering.linecorp.com/ko/blog/line-free-call-ios-dark-mode/
    Date2019.12.18 By미노 Views304
    Read More
  14. 웹뷰 개발 미세팁.(사파리에서 콘솔로그 보기)

    안녕하세요. 빗방울입니다.   iPhoneDev 아이폰 개발자 분들이 늘어나고 있는 것 같아 제가 알고 있는 미세팁을 조금이라도 많은 분들께 공유하고자 합니다. (이미 알고 계시는 분들 매우 많을 것 같지만 그래도, 게시판에 글을 남겨 놓으면 나중에 신입 개발...
    Date2019.06.18 By빗방울 Views593
    Read More
  15. No Image

    Multi Thread 환경에서의 올바른 Singleton 패턴

    일반적으로 하나의 인스턴스만 존재해야 할 경우 Singleton 패턴을 사용하게 된다.  물론 Single Thread에서 사용되는 경우에는 문제가 되지 않지만 Multi Thread 환경에서 Singleton 객체에 접근 시 초기화 관련하여 문제가 있다. 해결하기 위하여 여러가지 ...
    Date2019.02.15 ByNextLevel Views530
    Read More
  16. Xcode에 빌드번호를 자동으로 증가 시키기

    Xcode에 빌드 번호 자동 증가시키는 Shell Script 추가 먼저 아래 화면처럼 프로젝트에서 “Build Phases” 탭으로 이동 후 (+) 버튼을 눌러 “New Run Script Phase”를 선택합니다. 그런 다음, 추가된 Run Script에 아래 코드를 추가합니다. #!/bin/bash buildNu...
    Date2019.02.12 ByNextLevel Views631
    Read More
  17. No Image

    테이블뷰, 이미지 처리, Json 파싱 예제 입니다.

    앱 개발을 처음 접하시는 분들이 많으신 것 같아서 예전에 만들어놓은 간단한 앱 구현 소스 입니다. 아이튠즈 앱 리스트를 가져와서 앱으로 구현한 것을 목적으로 하고 있습니다. 사실 입사 지원했다가 앱 구현해서 내라고 해서 만들었는데 너무 간단하게 만들...
    Date2019.01.04 By빗방울 Views438
    Read More
  18. No Image

    웹과 앱, 앱과 앱의 연동. 딥링크

    딥링크 관련으로 개발이 필요한 부분이 있어서 정리하다가 공유하면 좋을 것 같아서 작성된 페이지 링크로 남겨놓습니다. (출처: 빗방울 github ) 제일 먼저 아이폰에서는 딥링크를 지원하지만 앱 설치 후 까지 데이터를 넘길 수 있는 방법이 없습니다. 유니버...
    Date2019.01.03 By빗방울 Views523
    Read More
  19. No Image

    iPhone XS, XS Max, XR 화면 크기 비율 및 구매시 추천 기기입니다.

    키노트 보면...아 설마 X로 가는건가 했는데...... 높이 폭 비율 x:1 8 1334 750 1.77866666666667 8+ 1920 1080 1.77777777777778 X 2436 1125 2.16533333333333 XS 2436 1125 2.16533333333333 XS Max 2688 1242 2.16425120772947 XR 1792 828 2.16425120772...
    Date2018.09.13 By빗방울 Views1242
    Read More
  20. Open quickly 창에서 정해진 라인으로 바로 이동하는법

    강좌는 아니고 Xcode 사용법 입니다. ㅎㅎ  Open quickly 창 자주 사용하는데 라인수를 지정하는 방법이 있는건 얼마전에 알았네요. 혹시나 해서 공유합니다. command + shift + o 하면 Open quickly 창이 띄죠. ":라인번호" 해서 특정라인으로 바로 이동 가능...
    Date2018.07.27 By미노 Views266
    Read More
  21. No Image

    개발 인증서, 푸쉬 인증서 생성. 키체인.

    아시는 분에게 키체인 인증서 관련 설명하면서 정리한 내용입니다. 혹시 제가 잘못알고 있거나 부족한 부분 있으면 댓글로 알려주시면 감사하겠습니다.  - 애플 인증 방식은 맥에 있는 Keychain Access앱에서 개인키와 공개 키를 통해 사용자에 대한 인증서를...
    Date2018.06.26 By빗방울 Views452
    Read More
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6

미답변질문들

아이폰데브 미답변질문들

운영진홈페이지

미노웍스 홈페이지

불편사항접수

아이폰데브 불편사항접수

구독하기

아이폰데브구독하기

후원하기

아이폰데브 후원명단
아이폰데브 후원하기

아이폰데브 모바일앱

아이폰데브 모바일앱

Socail Media

회원수   전체 : 12,175   오늘 : 0   어제 : 1   |   방문자수   전체 : 2,528,308   오늘 : 262   어제 : 678   |   페이지뷰   전체 : 39,695,080   오늘 : 1,248   어제 : 3,947  

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소