분류 전체보기 (65) 썸네일형 리스트형 프레임워크와 라이브러리 차이점 프레임워크 특징 정해진 규칙을 개발자가 따라야한다 제어의 역전 (Inversion of Control) 이 일어난다. 개발을 편하게 하기 위해 사용한다 -> ex) UIKit 라이브러리 특징 개발자가 코드를 제어할 수 있다.(언제 요청하고 , 응답받고 , 처리할 지 모두 주체가 결정한다.) 라이브러리는 개발자가 개발하는데 필요한 것 들을 모아둔것 단순 활용가능한 도구들의 집합을 이야기한다. -> ex) Alamofire 개념적으로 보았을때 둘의 가장 큰 차이는 엄청 심플하다 누가 누구를 컨트롤 하는가? 내가 코드를 컨트롤하냐? -> 라이브러리 누군가 만든 규칙을 따르냐 -> 프레임워크 Tuist 3.x 라이브러리 등록 방법 Tuist 관련 자료들을 보면 모두 버전이 2.x 타겟으로 되어있어 사용할때 디플리케이트 된 함수라고 떠서 머리가 조금 아프다. 그래서 이번에 직접 Doc를 보면서 Tuist 의 사용법을 공부했다. 기존이랑 많이 변하게된 부분이 라이브러리를 사용하는 부분인데 기존의 코드와 다르게 Dependencies 파일을 Tuist에 만들어준 후 SPM으로 사용할 라이브러리를 등록한다. import ProjectDescription let dependencies = Dependencies( swiftPackageManager: .init([ .remote(url: "https://github.com/ReactiveX/RxSwift.git", requirement: .upToNextMajor(from: "6.5.0").. Tuist 모듈화 공부 4편 클린아키텍처 Tuist를 사용해보자 라는 관점에서 시작됬던 프로젝트가 하나씩 공부하다보니 Tuist를 제대로 사용하기 위해 모듈화가 필요하다 생각이 들었고 모듈화를 공부하다보니 자연스럽게 clean architecture를 접하게 되어 기존의 프로젝트를 clean architecture로 변경하는 과정을 거친후 모듈화를 진행을 할려고한다. 그렇다면 clean architecture가 무엇인가? 내가 설명을 기깔나게 잘한다면 정말 좋겠지만 설명을 못하기에 잘 정리가되어있는 글 들을 첨부한다. https://k-elon.tistory.com/38 Clean Architecture 란 ? 안녕하세요 ! 국산 엘런 입니다 :) Robert C Martin(Uncle Bob) 형님이 블로그에 기재하시면서 화재가 된 것이 Cl.. ViewModel에 Driver를 사용하면 안티패턴? 지난번 면접 질문들을 회고하고 복기하는중 생각이 난 질문이 있는데 MVVM Input Output 패턴을 사용하고있고 Input , Output값을 Driver로 전달하고 있기에 (메인쓰레드에서 사용성을 보장하기위해) ViewModel에서 RxCocoa를 import하고 있는데 RxCocoa를 import를 하고 있는게 안티패턴이라고 한다 (설명을 해주시기에 RxCocoa는 View와 관련된 라이브러리 이기에 안티패턴이라고 한다) 그래서 고민을 면접 당시에는 뭔가 생각이 잘나지 않아 아 그런가요 하고 넘어갔는데 지금와서 생각해보니 조금 이상한게 있다 RxSwift의 Github에 나오는 RxCocoa 소개글 RxCocoa: Provides Cocoa-specific capabilities for gene.. 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.. 이전 1 2 3 4 5 6 7 ··· 9 다음