본문 바로가기

전체 글

(65)
Swift Throw Error Handling 런타임 에러 처리는 앱의 함수들을 만드는 과정중 처리해야할 에러처리 (ex 네트워크 통신 실패 ) 과 같은 사유를 처리해 유저에게 알리거나 로그를 기록하거나 하는 과정들을 처리하고 앱의 비정상적인 종료를 막기 위해 필요하다. 바로 코드를 보면서 설명을하겠습니다. enum ErrorTest : Error{ case BlankError } class ErrorHandling { func 테스트함수(item : String) throws -> String{ if(item == "테스트"){ return "성공" }else{ if(item == ""){ throw ErrorTest.BlankError } return "실패" } } } let errorHandling = ErrorHandling() do { l..
Async / await의 도입 스위프트 5.5 Async/await의 대한 공개가 벌써 꽤 오랜시간이 지났고 Async/await를 통해 클로저의 지옥에서 빠져나올수 있겠구나 생각을 했지만 생각보다 지원타겟이 높기에 아직 실무에 투입하기에는 이르지만 미리미리 준비하는 개발자가 되기 위해 Async/await에 대한 공부를 미리 해볼려고한다. func hellCode(test : String){ TstoryC(test: test) { c in self.TstoryB(test: c) { b in self.TstoryA(test: b) { a in print("a") } } } } func TstoryA(test : String , completionHandler: @escaping(_ a : String) -> ()) { completionHandler..
Swift WMO WMO란 Swift의 컴파일러 기술이고 전체 모듈 최적화의 성능 승리는 프로젝트에 크게 의존하지만 최대 2배 또는 5배까지 가능합니다. 전체 모듈 최적화는 -whole-module-optimization(또는 -wmo) 컴파일러 플래그로 활성화할 수 있으며 Xcode 8에서는 새 프로젝트에 대해 기본적으로 켜져 있습니다. 또한 Swift Package Manager는 릴리스 빌드에서 전체 모듈 최적화로 컴파일이 된다고합니다. 모듈은 Swift 파일의 집합이고 각 모듈은 배포단위로 컴파일이 된다 단일 컴파일에서 Swift 컴파일러는 모듈의 각 파일에 대해 개별적으로 호출이된다. 소스 파일을 읽고 구문 분헉을 한후 컴파일러는 Swift 코드를 최적화 , 코드를 생성 그리고 개체 파일을 생성합니다. 그리고 ..
Tuist 모듈화 공부 Swinject 3편 적용기 Swinject를 공부한지 약 1일차 어제는 오전 코로나로인한 몸살 , 그 후에 잠깐 공부 그리고 T1 GenG 경기를 보니하루가 끝나 오늘부터 본격적으로 Swinject을 공부를 시작했다. Swinject의 가장 중요한 것은 OOP 에서 SOILD 중 D '의존성 주입'(DI : Dependency Injection) 를 도와주는 라이브러리 이고 기존의 내 프로젝트들에서 class ViewModel{ var network : NetworkProtocol init(network : NetworkProtocol){ self.network = network } } 이렇게 처리해줬던 부분들을 도와주는 라이브러라고 이해하면 편할것이다. 기존에 DI를 많이 접해보고 약 2주에 걸쳐 OOP 를 공부했을때 DI의 중..
Tuist 모듈화 공부 Swinject 2편 잡담 Tuist를 공부하던와중 민소네님의 블로그를 보고 모듈화를 결심하게 되었고 모듈화를 공부하다보니 DI관련 라이브러리인 Swinject 알 게 되었고 Swinject에 대해 하나씩 공부하다보니 가볍게 사용하기에는 쉬운데 어떤 관점에서 모듈화를 하고 어떤관점에서 의존성을 주입해줘야하는지를 공부하다보니 생각보다 쉽게 시작이 되지않아 공부중이다 그러던 와중 코로나확진까지... ​Swinject의 정리가 완료되면 업데이트를 진행해볼려고한다. 우선 필요한 순서는 내가 모듈화를 할려는 App의 전체적인 구성도를 그리고 , 거기에 따른 Swinject 사용법 공부 , 관계도구성을 만들어야한다. 대략 이런 형태로 이루어져있고 필요에따라 NetworkServiceProtocol 과 필요한 아이템들을 상속받는 형태로 이루어..
Static Dispatch vs Dynamic Dispatch Static Dispatch , Dynamic Dispatch Static Dispatch 컴파일시 호출될 함수를 결정하기에 성능상 이득 Dynamic Dispatch 런타임에 호출될 함수를 결정하기에 성능상 손해 Class -> Dynamic Dispatch 이유 ovveride 를 통해 함수가 변경 될 수 있기 때문에 Struct -> Static Dispatch 이유 ovveride 를 통해 함수가 변경 될 수 없기에 항상 동일한 함수가 호출 Protocol -> Dynamic Dispatch 이유 해당 프로토콜을 선언을 해주는곳에서 각각 다른 함수로 동작하기에 알 수 없음 자세한 예제들은 아래의 코드를 보면서 하나씩 진행해보면 좋습니다! import Foundation protocol commom..
객체지향 프로그래밍 OOP (3) 드디어 객체지향 프로그래밍 3번째 글을 쓸 시간이 왔습니다 ㅜㅜ 한동안 개발과제 처리한다고 너무 바빠서 따로 공부한것을 글을 정리할 시간이 부족해 꽤 시간이 지난뒤 OOP에 대한 글을 마저 쓰게된다. 지금까지 공부했던것을 잠깐 정리하자면 절차지향 프로그래밍 -> 객체지향 프로그래밍으로 프로그래밍이 발전되어왔고 객체지향 프로그래밍에서 상당히 오랜시간 상속이 중요한 키워드로 학습이 이뤄졌지만 요즘은 상속보다는 추상화쪽에 좀 더 각광을 받는다고한다. 그리고 객체지향프로그밍의 특징중하나가 정보의 은닉화인데 개발자가 원하는대로 접근제어 연산자를 통해 외부에서의 접근을 막을수있고 Swift에서는 open public internal fileprivate private 순으로 컨트롤 할 수 있다. OOP를 공부하게 ..
Tuist , 모듈화 공부 기록기 기존 창업프로젝트 , 회사 프로젝트 모두 1인으로 개발하지만 Mac 회사용 / 개인용 2대를 사용하기 때문에 아주 가끔씩 git에서 Pull 로 프로젝트를 업데이트 하거나 집에서 작업하던것을 merge 할려고하면 xcodeproj, wcworkspace 에서 빌드에 오류가 생기게 되고 그 빌드 오류를 해결하기위해 상당히 귀찮았던 경험들이 많아 좋은 방법이 없을까 찾던도중 XcodeGen을 알게되었고 XcodeGen에 대해 찾다보니 좀더 사용성이 좋은 Tuist알게 되어 Tuist에 대해 공부를 해볼려고한다. 오픈소스로 이뤄져있고 https://github.com/tuist/tuist GitHub - tuist/tuist: 🚀 Create, maintain, and interact with Xcode pr..