XELP
'Developer' 카테고리의 글 목록 (2 Page)

Developer

Developer/iOS

UICollectionView FlowLayout 좌측정렬

CollectionView를 쓰다보면, 보통은 FlowLayout을 통해 정렬에 관련한 코드를 작성하게 된다. 다만 이 경우 아이템이 1개인 경우에 대해 Align이 되지 않는 문제가 존재하는데 이를 해결하는 클래스를 작성해서 사용하도록 한다. LeftAlignFlowLayout 위의 커스텀 FlowLayout을 추가해준다. Example 간단한 사용법은 위와 같다.

Developer/iOS

Stackview in ScrollView

사용처 iOS StackView는 구성에 따라 가로 또는 세로로 View를 쌓아주는 좋은 녀석이지만, 같은 사이즈로 뷰를 연속적으로 쌓기에는 그리 좋은 View가 아니기도 하다. 특히 Scroll이 되지 않는 다는 점은 꽤나 아쉬운 점인데, StackView를 ScrollView로 감싸면 이 문제를 해결 할 수 있다. 생각보다 자주 쓰는 방식이라 이것을 포스팅해둔다. ScrollView 먼저 스크롤 뷰를 추가하고, Constraints를 지정하여 뷰의 외부 사이즈를 잡는다. 보통은 전체 영역을 잡을 테니 이런 식으로. StackView StackView를 추가한다. ScrollView는 기본적으로 Contents layout Guide와 Frame layout Guide가 있다. StackView가 전체..

Developer/iOS

Alamofire + RxSwift

RxSwift를 공부하면서, Alamofire와 RxSwift의 결합 개인 라이브러리를 개발하기로 마음먹었다. RxAlamofire라는 좋은 라이브러리가 따로 존재하는 모양이지만, 개인적으로 개발한 라이브러리가 존재함과 동시에 기존 라이브러리와의 통합을 모색했다. (아마 이렇게 하는 것이 나에게 있어서도 더 낫지 않을까..) 기존 라이브러리의 형태 기존에는 위와같은 형태로 개발에 사용해왔다. Request에 필요한 정보를 가진 Requester class와, Request 관련 옵션을 포함한 BaseRequestOption, 그리고 성공과 실패에 사용할 Closure를 따로 마련했다. 이 Closure 형식을 제거하고 RxSwift를 도입해보기로 했다. RxSwift를 도입해보자 먼저 init에서 바로 ..

Developer/iOS

Array <-> Dictionary

// Array -> Dictionary var pgrInfoSplitOrigin = Dictionary(grouping: data.pgrInfo!, by: { $0.pgrSetSno }) var pgrInfoSplit = pgrInfoSplitOrigin.sorted(by: { (first, second) in return first.value.first!.pgrSetSno! Array var stackData : [[VO.PgrInfo]] = pgrInfoSplit.map({$0.value})

Developer/RxJava or RxKotlin

Observable

- Hot Observable - 마치 라이브 방송을 하듯, 발행 이후 모든 구독자들에게 같은 값을 뿌린다. val src: ConnectableObservable = Observable.interval(1, TimeUnit.SECONDS) .publish() src.connect() src.subscribe { value: Any -> println("First: $value") } Thread.sleep(3000) src.subscribe { value: Any -> println("Second: $value") } Thread.sleep(3000) ConnectqableObservable로 Hot Observable을 생성하여 publish한다. 이후 connect()함수를 작성해야 발행이 시작된다..

Developer/Android

Collection Reduce, Fold

val numbers = listOf(7, 4, 8, 1, 9) val sum = numbers.reduce { total, num -> total + num } println("reduced: $sum") // reduced: 29 val sumFromTen = numbers.fold(10) { total, num -> total + num } println("folded: $sumFromTen") // folded: 39 컬렉션 내의 모든 값을 모으는 함수들이다. reduce : 리스트의 첫번째 항목부터 하나씩 불러내 함수를 통해 값을 변화시킨다. fold : 처음에 넣은 값을 초기값으로 시작한다.

Developer/Android

Clean Architecture

클린 아키텍쳐란 프로그램 개발 시 3가지의 계층 (Enitity, UseCase, External Interfaces) 로 구분하며, 내부의 계층일 수록 외부의 계층과 단절되어야 있음을 뜻한다. 즉, 외부 인터페이스 내에 존재하는 DB, UI등은 Enitity에서 알아채선 안된다. 최대한 의존성을 낮추는 것이 이 패턴의 핵심이다. 구성요소 Entity는 주로 정책에 관련된 정보를 가지며, 가장 기본적인 데이터를 가지거나 이 값들을 계산하는 로직을 가진다. DTO도 이 계층에 포함된다. UseCase는 단순 실행 가능 작업을 가진다. Android의 경우에서는 UI와 상호작용하여 Repository 패턴을 통해 데이터를 가져오는 것을 뜻한다. getTestDataUseCase 등의 메소드 이름을 통해 기능..