Let's Swift 2016 2016. 7. 10. 15:22 - 티메르 경험/행사 이 글의 ID로 URL 전환 스위프트 3.0swift는 어디로 가는가. Swift의 역사 Swift 로드맵 Swift 3.0 훑어보기 예상 발표일: 2016 말Swift 언어와 개발 경험 강화Swift 3.0과 이후 버전의 소스 호환성API 디자인 가이드라인 => 시간나면 봐라 Swift Evolution & 구현 inout 위치 수정함수 파라미터 var 삭제함수 파라미터 첫번째 label은 삭제였으나 이제는 생김튜플 파라미터 디버깅 (FILE, LINE, FUUNCTION, DSO_HANDLE )언더바가 #으로 바뀜Clang 임포트의 변화NS가 사라짐, Value Type(NSArray, array)처럼 obj c, swift 둘다 있으면 빼지 않음변화의 방향이 무척 명확함API 가이드라인 꼭 읽기! 3줄요약 Swift 3.0 2016 발표Swift 많이 바뀜, 호환성 없을 수 있음시간있으면 SE 읽고, 시간 없으면 Swift API 가이드라인 읽기 스위프트 개발 환경의 변화Interface Builder, Source Editing, Saanitizer IB 새로운 Adaptive LayoutDevice Preview => orientation도 보이네 Source Editing SF Mono FontXcode Source Editor Extension알카트라즈 플러그인 => 번들 로딩 금지새로워진 API 문서오프라인 API 문서code signing, Provisioning현재 라인 하이라이트컬러 리터럴(color Literal, #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1))이미지 리터럴 UIImage(#imageLiteral(reourceName: “Screen shot”)) Sanitizer 부하가 좀 있음Scheme 에서 사용런타임 시 버그 추적, Swift3, c, c++, obj c에서만 사용Address, Thread, Memory SanitizerMemory Graph Debuging View Debuging 뷰 디버깅 상태에서 상태 알려줌, hierachy오토레이아웃 디버깅 => 런타임 이슈도 잡아줌유한 상태 머신 Quick Look => 뭐지등등 좋아짐 LLDB REPL? => 무슨 용어지자동 importparray, poarrayexpr let $a = 1; print($a) => 디버그 콘솔에서 사용 Instrument 디버깅 시 더 자세한 정보시스템 트레이스타임 프로파일러 스위프트 무조건 따라하기 Swift History 크리스 레트너 2010 시작2014 WWDC 에서 1.0 등장2015 오픈소스 발표 Swift TIOBE Index 생산성 순위Objective C의 미래가 밝지않다.if let, guard letgeneral, protocol, property 특성이 독특함protocol oriented programming! Swift Internals LLVM Low Level Virtual Machine2002년 크리스 레트너가 석사논문으로 내고 투자받아서 오픈소스 프로젝트2005년 애플이 지원, 컴파일러 팀으로 들어감컴파일러: 프론트엔드, 최적화기, 코드 생성기로 구성됨gcc에서 Clang, LLVM으로 대체프론트엔드는 swwift파일을 읽어서 => SIL Swift Type System Duck Type: 타입이 중요한게 아니라, quack, walk 메소드만 있으면 오리다.=> 스위프트는 Duck Type이 아니다. Type Strict하지만 Type 추정함. Type HM Type SystemType CheckerConstraint를 만족하는 집합을 만들고 계산Native Class Typeenum Typestruct Type Swift Foundation SDKSwift Compiler LLVM + Chris Lattner, Talyer swiftType System HM Type System + W algorithm Type Internals Swift Foundation CiscoSparkhttps://web.ciscospark.com/Tropohttps://www.tropo.com/ Android 개발자가 보는 Swift Optional ??: nil less문switch 로 써서 .None, .Some Clouser Arr reduce타입이 명확할 때 생략where Architect ViperView (로직은 없음)Present (뷰에 대한 로직) => ViewDidLoad..interact (Data에 대한 비즈니스 로직) => ex) 회원가입 로직, 로컬DB에 대한 로직Entity => 네트워크, DB등의 데이터 모델 => JSON, Relmrouter => 뷰간 전환DataService => 반복되는 로직 코드ViewModel (뷰에 나타나는 데이터와 1:1 매칭) Protocol Oriented Programming 프로토콜 기본구현: protocol + extension = protocol extension특정 타입이 할 일 지정 + 구현 한방에!extension에 protocol 에서 쓸 메소드를 구현해 놓은걸 default implementation이라고 함. 상속의 한계 상속받는 과정에서 동일한 기능을 구현하는 중복코드가 발생 참조 타입의 한계 동적 할당과 참조 카운팅의 한계 => 자원의 소모가 큼 Protocol class: person, bird, frog, turtle, fishprotocol: runnable, talkable, swimable, flyable => 기능의 블럭을 가지고 각각 조립함타임라인을 나타내는 소셜네트워크 (타임라인) 을 구현하자tableview Cell, CollectionView Cell에 들어갈 contents는 같다Class => reference typeStruct => Value typeShared Refactoring Image + Videoextension UIImageView: ContentPresentTable()extension AVPlayer: ContentPresentTable()struct 에 enum으로 video, image Advantage 모든 타입에 적용 가능제네릭과 결합하면 더욱 파급적인 효과상속의 한계 극복 => 상속체계 상관 없음상속이 불가능한 구조체에 확장 가능적은 시스템 비용 reference type cost > value type cost용이한 테스트성능상의 이득protocol + extension + generic은 환상의 조합수직적 확장 => 수평적 확장 delegate, datasource 에는 불가함 => 기본구현 불가 Swift Package Manager Swift Package manager homebrew, cocoapods, carthage, macPorts 원활한 배포 의존성 문제 swift dev snapshot 다운받기 manifest: 화물 리스트. 메타데이터를 가지고 있는 파일argument swift package list Rx Swift Reactive Programming data flow, propagationreactive extension funcional reactive programming (1…10).reduce(0){$0 + $1}data flow reactiveX.org observable: 비동기로 다수를 다룸 pod try RxSwift validation에 사용(이메일, pw 한자 한자 칠때마다 구독해놓은 값이 변화) rxmarbles.comrxAlamofirervvm이규현 rvvm 스위프트 성능 이해하기value 타입, protocol과 스위프트의 성능 최적화 Value Semantics 변수 할당 시 stack에 값 전체가 저장heap을 안 쓰면서 reference counter 증가 x Class vs Struct Class stack에 ref저장, heap에 값 저장, ref counter 증가 Struct stack에 실제 값 저장 Equatable 구현 Value Type의 장점 Mutable할때 Thread간의 의도하지 않은 공유로부터 안전함 Immutable로 써도 된다. 성능에 영향을 ㅣ치는 3가지 stack VS heapreference counting yes VS nomethod dispatch: static(compile time) VS dynamic(run time) 힙 할당의 문제 할당시 빈 곳을 찾고 관리하는 것은 복잡한 과정Thread safe 해야 함 => Lock => 멈출 수도 있음 Heap 할당 줄이기 struct를 이용해 value타입으로 만듬 reference Counting 변수 Copy할 때마다 증가thread safety하게 실행되어야 하므로…retain(), release()이 내부적으로 불림ARC Method Dispatch (static) 컴파일 시점에 메소드의 실제 코드 위치를 안다면 점프가 가능메소드 인라이닝!메소드 호출 부분에 메소드 내용을 붙여넣음 성능을 좋게 만드는 습관 final, private를 쓰는 버릇 => static하게 처리dynamic 쓰지 않음obj c 연동 최소화Whole Module Optimization 옵션 켜라 classstruct ref count를 줄이자. 용어 existential ContainerVWT(value witness table)copy on write 스위프트 Back End Kitura, Perfect, zewo, vaporvargrant, dockerif let where Realm Coredata / SQLite를 대체할 Realm Wraper가 아님, ORM 아님, 자체 c++zero copy => memory mapped fileresult 자동으로 업데이트encryption이 쉽다 공유하기 게시글 관리 Philographer 저작자표시 '경험 > 행사' 카테고리의 다른 글 171109 Play.Node (0) 2017.11.26 2016 메이커톤 (0) 2016.06.22 2016 IO Extended Seoul After 요약 (0) 2016.06.22 댓글 트랙백 공유 카테고리의 다른 글 일반 소셜 댓글 로드 중… 트랙백을 확인할 수 있습니다 트랙백 URL URL을 배껴둬서 트랙백을 보낼 수 있습니다 공유하려면 대상을 선택하세요 소셜 트위터 Facebook 카카오스토리 Band Naver Google+ 메시지 카카오톡 Line 기록 Pocket Evernote 카테고리의 다른 글 목록 2017.11.26 171109 Play.Node 2016.06.22 2016 메이커톤 2016.06.22 2016 IO Extended Seoul After 요약 검색 다른 글 더 보기 모든 글 보기 경험/행사 카테고리의 다른 글을 둘러봅니다 Philographer의 모든 글을 둘러봅니다