본문 바로가기

전체 글

(426)
[Algorithm] [Python&Swift] Programmers - 모의고사 모의고사 문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution ..
[iOS] [Swift] JSON Parsing with Codable JSON Parsing with Codable 최근 JSON Parsing에 대한 이해가 완벽하지 않다는 것을 깨닫고 이번 기회에 다시 복습하며 정리한 내용을 기록하고자 오랜만에 쓰는 포스트입니다. JSON to Codable 앱을 구현하다 보면 네트워킹 작업이 필수불가결하며 서버에서 가져오는 데이터는 대부분 JSON 포맷을 따릅니다. 따라서, 해당 데이터를 가공하여 우리 iOS 앱에 보여주기 위해서는 Swift를 통해 JSON을 다뤄야 합니다. 친절한 Apple은 이를 위해 Codable 이라는 프로토콜을 제공하며 이를 통해 더욱 간편하게 JSON을 다룰 수 있도록 합니다. Codable 프로토콜은 Encodable & Decodable 조합의 typealias입니다. 그러면 이를 이용하여 JSON 파..
[iOS] [Swift] POP - 프로토콜의 다형성 프로토콜과 다형성 다형성은 하나의 일관된 인터페이스를 통하여 여러 타입과 상호작용을 할 수 있게 해줍니다. var myPerson: Person myPerson = SwiftProgrammer(firstName: "Jungsu", lastName: "YEO", birthDate: birthDateProgrammer) myPerson = FootballPlayer(firstName: "Dan", lastName: "Marino", birthDate: birthDatePlayer) 위 예시에서는 PersonProtocol 타입의 변수를 하나 갖습니다. 다형성은 다양한 타입들을 personProtocol 프로토콜을 따르는 타입의 인스턴스면 변수에 대입할 수 있도록 해줍니다. 연관 타입과 프로토콜 프로토콜을 정..
[iOS] [Swift] POP - 프로토콜 시작 프로토콜 시작 본 문서는 프로토콜지향 프로그래밍 서적을 참고하여 작성된 내용입니다. 객체지향 프로그래밍을 기반으로 개발을 하고 있다면 인터페이스 라는 개념에 익숙할 것 입니다. 객체지향 방식으로 설계를 진행하는 경우에는 보통은 클래스 구조와 객체가 어떻게 상호작용을 하는지에 중점을 두고 설계를 시작합니다. 객체란 프로퍼티 형태로 속성에 관한 정보를 가지며, 객체에 기대하는 속성과 행위(메소드)가 무엇인지 애플리케이션에게 전달해주는 청사진이 없다면 객체를 생성할 수 없습니다. 대부분의 객체지향 언어들은 이러한 청사진을 클래스 형태로 부릅니다. 즉, 클래스는 객체의 프로퍼티와 행위를 단일 타입으로 캡슐화하는 구성체입니다. 이러한 객체지향 방식의 패러다임과 프로토콜지향 방식 패러다임은 큰 차이가 있습니다. 프..
[iOS] [Swift] UIKit Framework Swift UIKit 본 문서에는 UIKit 에 대한 기본기를 공부하며 정리한 내용을 기재하였습니다. UIKit UIKit 프레임워크는 iOS 앱의 UI 구성에 필요한 인프라를 제공합니다. 또한, 인터페이스 구현을 위한 window, view 아키텍처, 애플리케이션에 멀티 터치 및 기타 유형의 입력등을 제공하는 이벤트 처리 인프라, 사용자, 시스템 간 상호 작용을 관리하기 위한 기능을 제공합니다. 이외에도 프레임워크가 제공하는 다른 기능으로는 애니메이션, 문서, 그리기 및 인쇄, 현재 장치에 대한 정보, 텍스트 관리 및 디스플레이, 검색 지원, 접근성 지원, 앱 확장 지원 등의 관리가 있습니다. UIKit이 무엇인지 알아보았으니 주로 이용되는 클래스들에 대하여 알아보도록 하겠습니다. UILabel UIL..
[iOS] [Swift] RxCocoa 맛보기 RxCocoa 맛보기 RxCocoa는 애플 환경의 애플리케이션을 제작하기 위한 도구들을 모아놓은 Cocoa Framework를 Rx와 합친 기능을 제공하는 라이브러리입니다. RxCocoa는 RxSwift를 기반으로 만들어진 라이브러리이므로 사용하기 위해서는 CocoaPod과 같은 의존성 관리 도구에 별도로 추가해주어야 합니다. RxCocoa UI Control과 다른 SDK 클래스를 wrapping 한 커스텀 extension set iOS, tvOS, macOS 등 다양한 플랫폼에서 동작 ObserverType 과 ObservableType ObserverType: 값을 주입시킬 수 있는 타입 ObservableType: 값을 관찰할 수 있는 타입 ControlProperty Subject 와 같이 프..
[iOS] [Swift] RxSwift Operators Example Operators Example Create Operators Just just 연산자는 하나의 이벤트를 방출하는 Observable을 생성하는데 이용합니다. let disposeBag = DisposeBag() Observable.just("Hello") .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) Observable.just([1, 2, 3, 4, 5], scheduler: MainScheduler.instance) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) /* Hello [1, 2, 3, 4, 5] */ 위 예시와 같이 just는 단 하나의 이벤트를 생성하여 방출하고자 할..
[iOS] [Swift] RxSwift Subject & Relay & Driver Subjects & Relays 이번 시간에는 Subject와 Relay 에 대하여 알아보도록 하겠습니다. 앞서 저희는 이벤트를 방출하는 Observable 과 이를 구독하여 이벤트를 처리하는 Observer에 대하여 알아보았습니다. Observable과 Observer는 역할이 확실하게 구분되어져 있습니다. Observable은 Observer와 달리 다른 Observable을 구독하지 못합니다. 마찬가지로 Observer는 다른 Observer에게 본인이 받은 이벤트를 전달하지 못하죠. 둘의 역할이 명확히 구분되어 있는 만큼 이로 인한 유연성에 대한 한계도 존재합니다. 이러한 부분에 대한 편의성을 제공하고자 나온것이 Subject 입니다. Subject는 Observable 이면서 Observer 역..