본문 바로가기

분류 전체보기

(67)
iOS) RxSwift 가볍게 훑어보기 (2) PublishSubject PublishSubject Observer이면서 Observable Subject로 전달되는 이벤트를 Observer로 전달하는 가장 기본적인 Subject이다. 즉 이벤트를 전달하는 역할과 이벤트를 전달받는 역할 모두를 할 수 있다. 코드로 알아보자 let dispose Bag = DisposeBag() enum MyError: Error { case error } 기본적인 세팅은 다음과 같이 할 수 있다. let subject = PublishSubject() 위 코드에서 subject는 문자열이 포함된 next event를 받아서 다른 observer에게 전달할 수 있다. 생성자를 호출할 때에는 파라미터를 전달하지 않는다. subject는 비어있는 상태로 생성되는 것으로, 생성 시점에는 내부에 아무..
iOS) RxSwift 가볍게 훑어보기 (1) Observable Hello RxSwift RxSwift란? ReactiveX 라이브러리를 Swift 언어로 구현한 것이다. 그렇다면 ReactiveX는 무엇일까? 공식 홈페이지에 들어가보면 다음과 같이 적혀있다. An API for asynchronous programming with observable streams 여기서 주목해야 할 키워드는 asynchronous와 observable이다. 비동기적으로 발생한 이벤트를 관찰 가능하게 만들어 반응형 프로그래밍을 할 수 있도록 한다. 정확한 정의는 아니지만 지금 당장은 이정도로 생각해 볼 수 있다. 더 자세한 내용은 추후에 포스팅 할 계획이다. 왜 RxSwift? 그렇다면 장점은 무엇일까? RxSwift의 장점은 단순하고 직관적인 코드를 작성할 수 있다는 것이다. ta..
CS) 프로세스와 스레드 프로세스와 스레드 프로세스란? 실행중인 프로그램 프로세스는 실행중인 프로그램으로 메인 메모리에 존재한다. 실행중이지 않은 프로그램의 경우 저장장치에 있으며 프로세스는 언제든 CPU가 실행시킬 수 있는 상태에 있는 것이다. 시스템 콜을 통해 자원을 요구하는 주체이기도 하다. 시분할 시스템의 경우 여러 개의 프로세스를 동시에 수행하는데 이를 멀티 프로세싱 혹은 멀티 태스킹이라 한다. 멀티 프로세싱은 멀티 프로세서와 혼동될 수 있어 보통 멀티 태스킹을 더 많이 쓴다. 하나의 프로그램이 수행 중 여러 개의 프로세스를 만드는 경우도 있다. 프로세스는 사용자 프로세스와 시스템 프로세스로 나뉠 수 있는데, 자원 경쟁 측면에서는 동일하다. 사용자 프로세스: 응용 프로그램이 실행되는 것 시스템 프로세스: 운영체제가 필요..
iOS) 오토 레이아웃과 오토 리사이징 Auto Layout 제약조건 속성 제약조건은 다음과 같이 적용된다. Item1의 항목 = Item2의 항목 * Multiplier + Constant 제약조건의 속성으로는 다음의 세 가지가 있다. Relation: 동일, 이상, 이하 Multiplier, Constant: 제약조건의 값 Priority: 우선순위 제약조건 경쟁 Relation 제약조건 간 경쟁에 영향을 미치는 요소로 관계(relation)가 있다. 예를 들어 레이블 A에 대해 중앙에 위치해야 하고, 왼쪽으로 100 포인트 이상 떨어져야한다는 제약조건이 있다고 가정해보자. 레이블 A는 크기 유지라는 제약조건이 있을 때 경쟁이 발생할 수 있다. Priority 우선순위가 높은 것이 먼저 적용된다. 우선순위는 최대 1000까지의 자연수로 표..
iOS) Dark Mode 지원하기 Color Asset 생성 1. Color Asset들을 담을 폴더 생성 Assets.xcassets -> 오른쪽 버튼 클릭 -> Folder 굳이 폴더를 안만들어도 되지만 깔끔하게 정리하기 위해 만들자. 2. 생성한 폴더에 Color Set 생성 생성한 폴더 명을 원하는 이름으로 바꾸고 해당 폴더에서 오른쪽 버튼을 눌러 Color Set을 추가한다. 3. Any와 Dark에 대해 컬러 지정 Color Set을 생성하면 기본적으로 Appearances가 Any, Dark로 지정된다. 여기서 Any는 다크모드가 지원되지 않는 오래된 버전에서의 색상값을 지정할 때 사용한다. 현재 프로젝트에서는 라이트모드가 Any와 동일하므로 Any, Light, Dark 대신 Any, Dark으로 하였다. 각 모드에 대해 ..
iOS) SwiftLint 적용하기 - CocoaPods SwiftLint A tool to enforce Swift style and conventions, loosely based on GitHub's Swift Style Guide. Realm에서 제공하는 Swift 전용 Lint이다. 여기서 Lint란 소스 코드를 분석하여 프로그램 오류, 버그, 스타일 오류, 의심스러운 구조체에 표시(flag)를 달아놓기 위한 도구들을 가리킨다. 1. CocoaPod 설치 sudo gem install cocoapods 혹시 CocoaPod이 설치되어 있지 않다면 다음의 명령어를 실행하면 된다. 2. CocoaPod 적용 pod init 터미널에서 프로젝트 디렉토리로 이동한 후 pod init을 한다. 그러면 다음과 같이 Podfile이 생성된다. 3. Podfile ..
iOS) gitignore 적용하기 gitignore Specifies intentionally untracked files to ignore 프로젝트를 깃에 올릴 때 특정 파일이 추적되지 않도록 하기 위해서 사용한다. 보통 불필요한 충돌을 발생시키는 것을 막거나 공유되지 말아야 할 프로젝트 정보를 감추기 위해 사용된다. 만일 프로젝트 진행 중에 gitignore를 추가하면 이미 추적된 파일에 대해서는 적용되지 않는다. 추가 방법 gitignore.io를 이용하면 쉽게 gitignore 파일을 생성할 수 있다. gitignore.io에서 원하는 키워드를 다음과 같이 작성한다. 그러면 위와 같은 text가 생성된다. 전체 선택하여 복사한 후 프로젝트를 진행할 디렉토리에 .gitignore 파일을 생성하면 된다. 당연히 디렉토리는 깃과 연결된..
iOS) Core Data - 다른 저장소와의 비교 Core Data Persist or cache data and support undo on a single device. 코어 데이터는 데이터를 저장하고 관리하기 위한 프레임워크이다. 코어 데이터의 경우 해당 기기에 데이터를 저장하므로 오프라인에서도 동작 가능하며, 클라우드를 제외하고는 데이터를 공유할 수 없다. Object Object-Oriented Database 코어 데이터의 경우 SQL을 쓸 일 없이 오롯이 Object-Oriented 방식으로만 데이터를 다룰 수 있다. 데이터는 Object로 표현되며, NSManagedObjectModel의 인스턴스로 구현된다. 이러한 Object가 관계를 형성하여 Object Graphs를 이루고 이를 관리하는 프레임워크가 바로 코어 데이터이다. Map 어..
Middleware Protocol과 Communication Types of Communication 우리가 지금까지 생각했었던 컴퓨터 통신은 메세지를 보내고 받는 것이다. TCP나 UDP를 가지고 소켓 프로그래밍을 해봤으면 이런 방식을 사용해 봤을 것이다. 커뮤니케이션 타입을 보면 애플리케이션 레이어 입장에서 메세지를 주고 받는 방식이 단순히 tcp, udp를 사용하는 방식만 있는게 아니다. 우리가 매일 사용하고 있는 애플리케이션의 커뮤니케이션 방식은 사실은 다 다르다. 세부적으로 따져보면 커뮤니케이션 타입을 나눌 수 있고 기준에 따라 다음과 같이 나눌 수 있다. Persistent vs. transient communication Synchronous vs. asynchronous communication Discrete vs. streaming communi..
Middleware Protocol Middleware 애플리케이션과 OS 사이에 존재하면서 분산 시스템에서 중요한 역할을 한다. 분산시스템의 기본 목적이었던 distribution transparency와 같은 것들을 제공해 줄 수 있는 이유가 미들웨어가 가려주기 때문이다. 애플리케이션에게는 노출하고 싶은 부분만 노출하고 밑단에서 일어나는 것들은 미들웨어 레이어에서 숨겨준다는 것이다. Layered protocol 입장에서는 분산 시스템 역할을 수행하기 위해 미들웨어 레이어가 들어갈 수 도 있다. 미들웨어 프로토콜은 통신을 이용해야 하므로 애플리케이션과 전송 계층 사이에 위치해야 한다. 미들웨어를 사용하는 애플리케이션은 이제 TCP, UDP를 직접 사용하는 것이 아니고 미들웨어를 통해 통신을 하고 분산 시스템 서비스를 이용할 수 있게 된..