본문 바로가기

iOS/학습정리

(19)
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) 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 어..
iOS) UIViewController view를 다루는 것에 focus되어있는 controller 기본적으로 하나의 view property를 가지고 있다. 가끔 교체하는 경우도 있지만 안건드는 것이 좋다. 기본적으로 뷰 컨트롤러는 화면을 꽉 채우는 것이 목적이다. 화면을 보여주는 단위로는 스크린이 있다. 그 스크린 안에 윈도우라는 개념이 있다. 윈도우는 스크린에 들어가는 실제적인 뷰이다. 그 위에 올라가는 것이 뷰이다. 기본적으로 화면을 보여주기 위해 세 가지 정도가 있다. 초창기에는 뷰 컨트롤러가 꽉 채운 화면만 되었는데 요새는 다른 역할도 한다. ViewController와 MVC MVC 패턴에서 C 역할을 하지만 뷰에 집중되어 있다. 화면 전체 콘텐츠를 담당하거나 특정 영역을 담당한다. 앱을 개념적으로 생각해보면 어떤 뷰컨트롤러 하나..
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (3) 상속과 다형성 객체지향프로그래밍의 특징으로 크게 캡슐화, 은닉화, 추상화, 상속, 다형성이 있습니다. 그 중 상속과 다형성에 대해 알아볼까 합니다. 상속 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것 상속을 통해 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이합니다. 장점 코드 재사용성 코드 중복 제거 프로그램 생산성과 유지보수 향상 오버라이딩 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야 하는 경우에 사용한다. 오버라이딩 조건 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 다음의 조건이 같아야 ..
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (2) 객체 비교 객체간의 비교 - 기본 == 기본적으로 객체를 비교할 때 값이 아닌 레퍼런스를 비교합니다. 따라서 a와 b는 같은 값을 가지고 있지만 서로 다른 것으로 나타납니다. a와 c는 같은 값을 참조하고 있으므로 같다고 간주합니다. class Car : NSObject { var horsePower : Int var plate : String init(power: Int, id: String) { horsePower = power plate = id } } let a = Car(power: 200, id: "AX993JE") let b = Car(power: 200, id: "AX993JE") let c = a print(a == b) //
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (1) 객체란? 객체 지향 프로그래밍에서 인스턴스는 해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체를 의미한다. 여기서 클래스는 속성과 행위로 구성된 일종의 설계도이다. OOP에서 객체는 클래스와 인스턴스를 포함한 개념이다. 출처: wikipedia 객체지향프로그래밍에서 객체란 무엇인가를 고민하면 떠오르는 용어가 세 가지 있습니다. 바로 클래스, 오브젝트, 인스턴스 입니다. 위 인스턴스의 정의에서처럼 세 가지 개념은 서로 연관되어 있습니다. 각 용어에 대해 더 자세히 알아보자면 다음과 같습니다. Object 실제로 존재하는 것 객체지향이론의 기본 개념은 '실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.'라는 것입니다. 객체란 실제 세계에서 처럼 실제 사물의 속성과..