이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다.
iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다.
본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
리덕스를 도입할 때 주저하게 만드는 장벽들
○ 개요
몹엑스, 아폴로, 컨텍스트 API 등 리덕스를 도입하기도 전에 이미 선택적인 고민을 하게 만듭니다. 리덕스를 도입한 후에도 사가, 펜더, 옵져버블등의 미들웨어의 도입에서도 선택 장애가 발생하는 문제들이 리덕스 선택을 주저하게 만듭니다.
2020년 리덕스는 좋은 선택지 일까요? 리덕스는 언제 그리고 어떻게 사용해야 활용도를 높일 수 있을까요? 에어비앤비 결제 시스템과 3차원 시각화 시스템에 적용한 리덕스 활용 사례를 살펴보며 리덕스의 효용 가치를 같이 살펴보고자 합니다.
○ 목차
- 형상관리를 어렵게 하는 요소들
- MobX vs Redux
- 단방향 데이터 흐름(Flux)
- 미들웨어 살펴보기
- 리덕스와 미들웨어 활용 데모
- Typescript와 GraphQL 도입 사례
이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다.
iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다.
본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
리덕스를 도입할 때 주저하게 만드는 장벽들
○ 개요
몹엑스, 아폴로, 컨텍스트 API 등 리덕스를 도입하기도 전에 이미 선택적인 고민을 하게 만듭니다. 리덕스를 도입한 후에도 사가, 펜더, 옵져버블등의 미들웨어의 도입에서도 선택 장애가 발생하는 문제들이 리덕스 선택을 주저하게 만듭니다.
2020년 리덕스는 좋은 선택지 일까요? 리덕스는 언제 그리고 어떻게 사용해야 활용도를 높일 수 있을까요? 에어비앤비 결제 시스템과 3차원 시각화 시스템에 적용한 리덕스 활용 사례를 살펴보며 리덕스의 효용 가치를 같이 살펴보고자 합니다.
○ 목차
- 형상관리를 어렵게 하는 요소들
- MobX vs Redux
- 단방향 데이터 흐름(Flux)
- 미들웨어 살펴보기
- 리덕스와 미들웨어 활용 데모
- Typescript와 GraphQL 도입 사례
The document discusses the major changes and improvements in Swift 3.0, which is expected to be released in late 2016. It outlines proposals like removing var from function parameters, distinguishing single-tuple from multiple-argument function types, and applying API design guidelines to the standard library. It also covers changes to the Foundation framework like dropping the NS prefix and making value types non-mutable by default. The goal is to enhance the Swift language, development experience, and source compatibility between versions.
This document discusses using Swift for server-side development with Docker and Kitura. It provides an agenda that covers a WWDC 2016 Swift session on server-side development, discusses common backend frameworks, and demonstrates setting up a Kitura project in a VirtualBox virtual machine and building and running a Docker container for the project. Code examples are provided for initializing a Swift package, defining routes and starting a Kitura server.
The document provides an overview of the Swift Foundation framework. It discusses key types in Foundation like AffineTransform, CharacterSet, Data, Date, DateComponents, Decimal, FileManager, IndexPath, Measurement, Notification, NSError, URL, and URLComponents. The document also briefly mentions the purpose of each type.
RxSwift is a library for reactive programming with Observables that provide asynchronous, event-based data streams. The document discusses key concepts of reactive programming like data flows, propagation of change, and functional reactive programming. It provides examples of using RxSwift to create Observables from various sources and applying operators like map, filter, and combineLatest. Validation of form fields is demonstrated by combining Observables of text changes and checking field values and formats.
LetSwift 2023에서 발표한 객체-함수형 아키텍처 만들기 자료 공유합니다. 객체지향과 함수형 프로그래밍을 조합하여, MVVM 기반으로 아키텍처를 설계해보았습니다. 선언적 프로그래밍을 통한 런타임의 안정성과 가독성, 객체지향을 통한 책임 분배와 설계에 대한 관점에서 보면 좋을 것 같습니다.
감사합니다.
아키텍처 코드 : https://lnkd.in/ghRVR_SS
적용 데모 : https://lnkd.in/gGfPqT85
RxMVVM-DataCenter is iOS app architecture to remove dependencies among ViewControllers. If you see the result which is made by using RxMVVM-DataCenter at https://github.com/skyfe79/RxGitSearch. You can know there is no dependencies among ViewControllers and how to use Rx techniques.
RxMVVM-DataCenter 은 어떻게 하면 의존성을 제거할 수 있을까에 대한 고민에서 시작된 프로젝트입니다. RxGitSearch라는 작은 예제를 만들어서 ViewController간에 의존성을 제거하였고 Rx를 사용하여 앱을 유연하게 변화에 빠르게 대응할 수 있도록 구현하였습니다.
10. Idea from…
상속의 한계
서로 다른 클래스에서 상속받은 클래스는 동일한 기능
을
구현하기 위해 중복코드 발생
카테고리의 한계 및 부작용
프로퍼티 추가 불가
오직 클래스에만 적용 가능
기존 메서드를 (자신도 모르게) 오버라이드 가능
Protocol
Default Implimentation
18. POP & Value in Project
Social Networking Service
19. POP & Value in Project
Social Networking Service
Social Media
20. 타임라인을 나타낼 수 있는 테이블 뷰 컨트롤러를 구성해 봅니다
“테이블 뷰 형식의 타임라인이 필요해요”
23. class TimelineTableViewCell: UITableViewCell {
var mediaImageView: UIImageView
var note: UILabel
var content: NSDictionary
}
class TimelineTableViewController: UITableViewController {
var contents: [NSDictionary]
}
class DetailViewController: UIViewController {
var mediaImageView: UIImageView
var note: UILabel
var content: NSDictionary
}
24. “성규씨, 정말 간단한 기능이 더 필요해요”
사진첩 처럼 볼 수 있는 모드를 추가할 수 있을까요?
25. “성규씨, 정말 간단한 기능이 더 필요해요”
사진첩 처럼 볼 수 있는 모드를 추가할 수 있을까요?
……………………
30. Content Model
class Content {
var URLString: String
var note: String
}
struct Content {
var URLString: String
var note: String
}
31. Model Property
class TimelineTableViewController: UITableViewController {
var contents: [Content]
// …
}
class TimelineCollectionViewController: UITableViewController {
var contents: [Content]
// …
}
32. Model Property
class TimelineTableViewController: UITableViewController,
ContainContents {
var contents: [Content]
// …
}
class TimelineCollectionViewController: UITableViewController ,
ContainContents {
var contents: [Content]
// …
}
protocol ContainContents {
var contents: [Content] { get }
}
33. Model Property
class TimelineTableViewController: UITableViewController,
ContainContents { … }
class TimelineCollectionViewController: UITableViewController,
ContainContents { … }
protocol ContainContents {
var contents: [Content] { get }
}
class TimelineContentObject {
static let shared = TimelineContentObject()
var contents: [Content] = [Content]()
}
extension ContainContents {
var contents: [Content] {
return TimelineContentObject.shared.contents
}
}
36. View
protocol MediaContainer: class {
var content: Content? { get set }
var media: UIImageView { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
37. View
class TimelineTableViewCell: UITableViewCell,
MediaContainer {
var media: UIImageView
var note: UILabel
var content: Content? {
didSet {
contentChanged()
}
}
}
class TimelineCollectionViewCell: UICollectionViewCell,
MediaContainer {
var media: UIImageView
var note: UILabel
var content: Content? {
didSet {
contentChanged()
}
}
}
48. Protocol
protocol MediaContainer: class {
var content: Content? { get set }
var media: UIImageView { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
49. Protocol
protocol ContentPresentable: class, Layout {
var frame: CGRect { get set }
var canPresentContent: Bool { get }
}
extension ContentPresentable {
var canPresentContent: Bool {
return true
}
}
extension UIImageView: ContentPresentable { }
extension AVPlayerLayer: ContentPresentable { }
50. Protocol / Model
protocol MediaContainer: class {
var content: Content? { get set }
var media: UIImageView { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
struct Content {
var URLString: String
var note: String
}
51. Protocol / Model
protocol MediaContainer: class {
var content: Content? { get set }
var media: ContentPresentable { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
struct Content {
enum MediaType {
case image, video
}
var type: Content.MediaType
var URLString: String
var note: String
}
52. Protocol / Model
protocol MediaContainer: class {
var content: Content? { get set }
var media: ContentPresentable { get }
var note: UILabel { get set }
var videoLayer: AVPlayerLayer { get }
var mediaImageView: UIImageView { get }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
struct Content {
enum MediaType {
case image, video
}
var type: Content.MediaType
var URLString: String
var note: String
}
63. Summary
Value Type을 사용하여 성능상의 이득을 취하자
Protocol + Extension + Generic은 환상의 조합
이다
이제 상속을 통한 수직 확장이 아닌
Protocol과 Extension을 통한 수평 확장과
기능추가를 고민해 볼 때…
64. Reference
Protocol-Oriented Programming in Swift
(#WWDC15, 408)
Building Better Apps with Value Types in Swift
(#WWDC15, 414)
Protocol and Value Oriented Programming in
UIKit Apps (#WWDC16, 419)
LET’SWIFT 2016 Session
: 스위프트 퍼포먼스 이해하기 - 유용하 님