분류 전체보기
-
Clean Architecture + MVVMArchitecture + Design Pattern 2022. 10. 3. 23:56
모바일 software engineering 에서 가장 많이 사용하는 architectural patterns 는 MVVM, Clearn Architecture, Redux pattern 이 있다. 이번 글에서는 MVVM 과 Clearn Architecture 가 iOS App 에서 어떻게 적용되는지 살펴볼 것이다. Clearn Architecture 에서 가장 중요한 규칙은 안쪽 layer 에서 바깥쪽 layer 로 dependencies 가 향하지 않는 것이다. 즉 안쪽에서는 바깥쪽에 대한 정보를 몰라야 한다. 모든 Layers 를 그룹으로 나누어보면 Presentation, Domain and Data layers 이렇게 세개로 구성할 수 있다. Domain Layer (Business logic)..
-
RxAlamofireSwift/RxSwift 2022. 10. 3. 00:01
https://github.com/RxSwiftCommunity/RxAlamofire 책을 뒤져보다가 우연히 RxAlamofire 를 발견했다. (RxCommunity 프로젝트들 중 하나.) Alamofire 는 iOS 진영에서 매우매우 많이 쓰는 API Request Framework 이다. RxAlamofire 를 이용해 쓸 수 있는 단순한 형태의 함수들은 아래와 같은 것들이 있다. // retrieve a request result as raw text RxAlamofire.string(method: HTTPMethod, url: URLConvertible) // decoded json 을 return 하기 때문에, .map 을 이용해서 Type 을 바꿔주거나, // 또는 subscription 내..
-
RxSwift Observable, Subjects and RelaysSwift/RxSwift 2022. 10. 1. 23:57
Subject Observable 이면서 observer 일 수 있음. (== 데이터를 방출 (emit), 구독 (subscribe) 할 수 있음. ) PublishSubject: empty 로 시작해서 subscribers 에게만 새로운 elements 를 emit BehaviorSubject: 초기값을 가짐. 초기 값 또는 가장 최근 element 를 new subscribers 에게 emit 해줌(replay) ReplaySubject: buffer size 만큼 초기화 되고, 해당 size 만큼의 element 를 지니고 있다가 new subscribers 에게 emit AsyncSubject: subject 가 complete event 를 받을 때만 가장 마지막 next event 값을 emi..
-
UITableView (with RxSwift)Swift/RxSwift 2022. 9. 30. 23:59
TableView 를 RxSwift 로 그리기! CollectionView 도 같은 방식으로 작동한다고 한다. (직접 해봐야 하지만.) 기존의 길고 긴 TableView boilier plate code 대신, cities.bind(to: tableView.rx.items) { (tableView: UITableView, index: Int, element: String) in let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") cell.textLabel?.text = element return cell } 한 다섯줄의 간단한 코드로 기본적인 UITableView 를 만들 수 있다! 작동하는 기본적인 방식은, Observable 을 ..
-
Login Validation (simple..) RxSwift 구현Swift/RxSwift 2022. 9. 29. 23:25
오늘 구현해본 기능은 RxSwift 를 사용해서 기본적인 로그인 Validation. 위 아래 textField 는 각각 email, password 를 의미한다고 했을 때, 두 텍스트가 일정 조건을 맞춰주면 Login Button 이 빨간색으로 바뀌는 식으로 만들어주었다. 구현 방식은 BehaviorRelay 를 이용해서 각 TextField 의 값을 emailRelay, passwordRelay 에 넣어주고, combineLatest 를 이용해서 두 relay 값을 받은 후 특정조건을 넣는 식으로 구현하였다. // -------------- inside ViewController ---------------- // private let emailRelay = BehaviorRelay(value: ""..
-
RxSwift basic test (count 1씩 올리기)Swift/RxSwift 2022. 9. 28. 23:07
with RxSwift import UIKit import Then import RxSwift import RxCocoa class ViewController: UIViewController { private var count = BehaviorSubject(value: 0) private let bag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() setupBindings() setupLayout() } private func setupBindings() { btn.rx.tap .subscribe(onNext: { [weak self] _ in guard let self = self else { return } print("btn t..
-
MVVMArchitecture + Design Pattern 2022. 9. 26. 10:47
Server로 부터 날짜를 가져오고, 날짜를 화면에 띄워주는 서비스를 생각해보자. 먼저 Repository 에서 Server 날짜를 가져온다. 가져오는 Server 의 데이터 (Entity)는 우리가 원하는 데이터 자체가 아니다. 즉, 가공이 필요하다. 따라서 그 다음으로 Service 에서 Repository 에 있는 Entity 를 가져와 이를 우리가 사용할 데이터 형태(Model)로 가공한다. 그 후에는 가공된 데이터를 화면에 보여주어야 하는데, Service 에는 'Date' Type 이 사용되지만 화면에서는 String Type이 필요하므로 데이터 형태의 변환이 또다시 필요하다. 이때, 그 가공을 맡는 곳을 ViewModel 이라고 한다. 그 후 View 에서 ViewModel 의 데이터를 가져..
-
Clean ArchitectureArchitecture + Design Pattern 2022. 9. 25. 22:27
지난 몇년동안 시스템 아키텍쳐에 대한 많은 아이디어들이 있었다. Hexagonal Architecture Onion Architecture Screaming Architecture DCI BCE 이 아키텍쳐들은 모두 디테일한 점들에서는 다른점을 가지고 있지만 크게보면 매우 유사하다. 이것들 모두 '관심사의 분리' 라는 같은 목적을 가지고있었고, 이것들 모두 소프트웨어를 여러 층들로 나눔으로써 그 목적을 이룬다. 각각은 최소 하나의 business rules 층과, interfaces 층을 가지고있다. 각 architectures 는 다음과 같은 시스템을 만든다. 1. 프레임워크와 독립적. 아키텍쳐는 소프트웨어에 얹혀있는 기능을 위한 라이브러리의 존재와 독립적이다. 이렇게 함으로써 프레임워크를 단순히 툴로..