본문 바로가기

전체 글

(61)
RxSwift Disposable 이란? 지난번 면접에서 RxSwift에 관한 면접 질문을 받던중 Disposable 이란 질문을 받게되었고 항상 사용했지만 답변으로 드리기에 어떤식으로 답변을 드려야하나 생각을 고민해봤고 머리속에서 Observable과 관련된 구독의 메모리 할당을 해제해주는 거구나 라는걸로 알고있는데 평소 답변을 생각을 안해봤고 내가 알고있는 지식이 맞나? 라는 확신이 들지 않으니 자신감있게 말할 자신이 없었고 그래서 답변을 아예 못드리겠다라고 답변을 드렸던것같다. 그러면서 나오는 추가질문인 Disposebag은 언제 메모리 할당을 해제하냐 라는 질문은 deinit되는 시점에 메모리 할당이 해제된다고 말씀드렸는데 이게 맞나 아닌가 싶어서 제대로 공부를 해볼려고한다. 우선 Observable을 subscribe / bind (구..
Property Wrapper 이번에 운이 좋게 좋은기업의 이직 면접을 볼 기회가 있어 기술면접을 보게 되었는데 과제리뷰를 진행하는 과정에서 Property Wrapper를 사용한 코드에 대해 질문을 주셨고 한참을 고민하다가 답변을 드렸는데 잘 몰라서 이상하게 답변을 했고 면접이 끝나고 찾아보니 뭐 당연히 틀린내용을 ㅜㅜ 실패는 성공의 어머니라고 하지 않은가... 기억안나면 복습하면되지뭐 Property Wrapper 직독직해 해보면 속성 래퍼 라고 하는데 이게 뭘하느냐는 잠시뒤에 말해드리고 SwiftUI를 사용해보신분들이라면 @State , @Binding같은 것들을 많이 보았을텐데 이런것들을 Property Wrapper라고 한다. 이게 뭐냐? 컴파일러에게 이 타입은 특별한거야! 라고 소개를 해줍니다. 그럼 어떻게사용하냐 실제로 ..
RxMoya를 직접 만들어서 사용해보자 //Moya 처럼 사용 가능하게 만들기위해 typealias HTTPHeaders = [String : String] protocol TargetType { var baseURL: String { get } var headers : HTTPHeaders { get } var method: HTTPMethod { get } var path: String { get } var parameters: RequestParams { get } } enum HTTPMethod : String{ case GET = "GET" case POST = "POST" } //요청은 Json으로 만들기 때문에 Encodeable enum RequestParams { case query(_ parameter: Encodable?)..
RxDataSources Multiple Object Multiple Section RxDataSources를 사용하다보면 여러개의 색션 여러타입의 오브젝트를 사용해야할 필요가 있었는데 그때마다 조금씩 햇갈리는게 있어 이번에 정식 RxSwift 예제로 공부를 다시해볼려고한다. static func dataSource() -> RxTableViewSectionedReloadDataSource { return RxTableViewSectionedReloadDataSource( configureCell: { dataSource, table, idxPath, _ in switch dataSource[idxPath] { case let .ImageSectionItem(image, title): let cell: ImageTitleTableViewCell = table.dequeueReusable..
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의 중..