RxSwift에서 가장 중요한 요소 중 하나인 Observable에 대해 알아보겠습니다. Observable란? 구독할 수 있는 스트림 형태의 값, 해당 값을 생성시에 들어오는 값을 Observer가 관찰하고 있다가 값을 방출해준다. 사실 개념만 봐서는 이해가 잘 안될 수 있습니다. Observable을 공부해본 결과 Observer와 Observable이라는 개념이 존재합니다. Observer는 값을 관찰하고 있다가 스트림으로 값을 보냅니다. Observable는 받을 수 있는 값들을 모아 스트림을 만들고 해당 값을 가지고 있습니다. Observer에도 2가지 형태의 Observer가 존재 합니다. 첫번째는, Observable 생성시에 값이 들어오는 것을 추적하는 Observer. 값이 들어오면 방..
RxSwift에 대한 공부를 시작하려고 합니다. 먼저 왜 RxSwift를 사용해야하는지, 왜 RxSwift에 관심을 갖게 되었는지 말씀드리고자합니다. 네트워크를 통한 데이터 통신이 잦아지면서 비동기 처리를 해야했고, 탈출 클로저(@escaping)을 통한 completionHandler 처리를 해주어야 했습니다. 하지만 비동기 처리의 중첩 등의 이유로 탈출 클로저를 통한 함수 생성은 복잡하기도 하고 사실 매번 만드는데 조금 귀찮아지기도 했습니다.... 그래서 비동기 처리를 쉽고 간결하게 할 수 있는 방법을 찾아보던 도중 비동기 프로그래밍을 위한 라이브러리를 알게 되었습니다. 비동기 프로그래밍을 위한 라이브러리는 대표적으로 Promise, Bolt, RxSwift 이 있습니다. UIKit과 함께 사용됩니다..
## 시작하기 전 기본적으로 많이 사용되는 MVC, MVP, MVVM 등의 패턴 중 Apple에서 기본으로 제공하고 있는 MVC 패턴에 대해 알아보려고 합니다. ##MVC 패턴이이란? 프로젝트를 Model(M) , View(V), Controller(C)로 나누어 관리하는 패턴입니다. 각 구성요소의 역할은, - Model: Data를 다루는 부분을 담당 - View: 화면에 보여지는 UI를 담당 - Controller: Model과 View를 연결. View에서 들어온 사용자의 입력을 바탕으로 Model을 변경하고, 변경된 Model로 부터 View를 갱신하는 역할 ## 장점 - 비교적 사용이 쉽고 코드량이 적습니다. - Apple에서 기본으로 제공하고 있는 패턴이기 때문에 접근에 용이합니다. - 개발속..
## 시작하기 전 Apple의 iOS에서는 MVC 패턴을 기본적으로 지원하고 있고, 사용하기 쉽다는 이유로 큰 고민없이 MVC 패턴을 사용했습니다. 작고 큰 프로젝트를 경험하면서 아키텍처와 디자인 패턴의 중요성을 느끼게 되었고, 이에 자세히 공부를 시작해 보려고 합니다. ## 아키텍처와 디자인 패턴 그 동안 두 용어에 큰 차이점을 느끼지 못하며 비슷한 의미로 사용했습니다. 하지만 용어 사이에는 명확한 차이점이 존재합니다. 아키텍처란, '시스템을 구성하는 서브 시스템, 컴포넌트와 같이 구성요소 간의 관계를 관리하는 시스템의 구조' 입니다. 디자인 패턴이란, '프로그램 개발 과정 속에서 자주 나타나는 문제들을 쉽게 해결하기 위한 방법으로, 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 바탕으로 이후..
상황: Tab Bar의 높이와 위치를 변경해주기위해 관련 프로퍼티의 값 수정이 필요했다. 문제점1: viewDidLoad에서 UI가 변경되지 않는다. 해결 방법1: viewWillLayoutSubviews 에 관련 프로퍼티의 값을 수정하였더니 UI가 정상적으로 변경되었다. 문제점2: 다른 ViewController를 띄웠다가 다시 Tab Bar가 있는 View로 돌아오면 높이와 위치가 원래대로 돌아가는 현상이 발생했다. 해결 방법2: viewWillLayoutSubviews는 다른 ViewController를 present, push, dismiss 뷰 계층에 변화가 있을 때 불러와지는 메소드이다. 그러다보니 뷰가 원래의 모습으로 돌아가는 듯했다. 그래서 Custom TabBarController Cla..
상황: String으로 받은 전화번호를 바로 전화 연결이 가능하도록 한다. 문제: String이 숫자로만 이루어져있으면 문제가 없지만 특수문자가 포함되어 있는 경우가 있다. 해결방법: 처음에는 replacing(of:with:)로 처리하려고 했지만 특수문자의 모든 경우를 예외처리하는 것은 거의 불가능에 가깝다는 것을 깨닫고 고차함수인 filter로 숫자만 담기로 했다. var number: String = “00)000-000” number.filter { Int(String($0)) != nil }
완전탐색 정의 Brute force, 즉 ‘무식하게 푼다’라는 의미를 가지고있는 알고리즘이다. 모든 경우를 체크하여 풀이하는 방식으로, 쉽고 확실하게 답을 찾을 수 있지만 시간이 많이 든다. 완전탐색의 종류 브루트 포스 : for문을 이용하여 처음부터 끝까지 탐색하는 방법 비트마스크(Bitmask) : 이진수 표현을 자료구조로 쓰는 기법 (AND, OR, XOR, SHIFT, NOT) 백트래킹 : 분할정복을 이용한 기법, 재귀함수를 이용, 해를 찾아가는 도중에 해가 될 것 같지 않은 경로가 있다면 더 이상 가지 않고 되돌아간다. 재귀함수 : 함수 내에서 함수 자기 자신을 계속해서 호출하는 것 순열(Permutation) : 서로 다른 n개의 원소에서 r개의 중복을 허용하지 않고 순서대로 늘어 놓은 수 B..
- Total
- Today
- Yesterday
- dip
- TextField
- Push
- CSR
- Rx
- rxcocoa
- ios
- 아키텍처
- relay
- APNS
- notification
- TabBar
- 프로비저닝
- 프로비저닝 프로파일
- Apple
- subject
- certificate
- MVVM
- Crossing Boundaries
- 클린아키텍처
- 프로파일
- Swift
- 동적계획법
- Clean Architecture
- 코드사이닝
- MVC
- RxSwift
- 코테
- provisioning profile
- remote
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |