Submit Search
Upload
알아보자 Dependency Injection과 Deli
•
3 likes
•
931 views
Jungwon An
Follow
let us: Go! 행사에서 발표한 내용으로, Dependency Injection에 대해서 알아보고 Swift의 DI Framework인 Deli를 소개합니다.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 60
Download now
Download to read offline
Recommended
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
Mintak Son
Hello, ReactorKit
Hello, ReactorKit
Suyeol Jeon
Redux Saga - Under the hood
Redux Saga - Under the hood
Waqqas Jabbar
Manipulating Android tasks and back stack
Manipulating Android tasks and back stack
Ran Nachmany
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
YoungSu Son
A Framework Driven Development
A Framework Driven Development
정민 안
Campus online tilastot ja talous 2020
Campus online tilastot ja talous 2020
eamkhanke
Unirest Java Tutorial | Java Http Client
Unirest Java Tutorial | Java Http Client
rahul patel
Recommended
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
Mintak Son
Hello, ReactorKit
Hello, ReactorKit
Suyeol Jeon
Redux Saga - Under the hood
Redux Saga - Under the hood
Waqqas Jabbar
Manipulating Android tasks and back stack
Manipulating Android tasks and back stack
Ran Nachmany
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
YoungSu Son
A Framework Driven Development
A Framework Driven Development
정민 안
Campus online tilastot ja talous 2020
Campus online tilastot ja talous 2020
eamkhanke
Unirest Java Tutorial | Java Http Client
Unirest Java Tutorial | Java Http Client
rahul patel
Emacs on WSL
Emacs on WSL
kai2nenobu
Building confidence in concurrent code with a model checker: TLA+ for program...
Building confidence in concurrent code with a model checker: TLA+ for program...
Scott Wlaschin
Try Jetpack Compose
Try Jetpack Compose
LutasLin
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
정혜인 포트폴리오
정혜인 포트폴리오
henni31
The redux saga begins
The redux saga begins
Daniel Franz
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013
Scott Wlaschin
Testando API REST - Parte 1
Testando API REST - Parte 1
alinebiath
Dependency injection in CakePHP
Dependency injection in CakePHP
markstory
Idiomatic Kotlin
Idiomatic Kotlin
intelliyole
RxSwift to Combine
RxSwift to Combine
Bo-Young Park
20171104 FRP 패러다임
20171104 FRP 패러다임
Chiwon Song
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patterns
Łukasz Chruściel
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
ssuser2601f7
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
Ryan Park
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Jorge Vásquez
디지털 마케팅 스쿨 5기_개인프로젝트 신하나
디지털 마케팅 스쿨 5기_개인프로젝트 신하나
Hana Shin
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
Johnny Sung
Android Jetpack Compose - Turkey 2021
Android Jetpack Compose - Turkey 2021
Nelson Glauber Leal
Kotlin
Kotlin
Ahmad Mahagna
The definitive guide to java agents
The definitive guide to java agents
Rafael Winterhalter
Griffon @ Svwjug
Griffon @ Svwjug
Andres Almiray
More Related Content
What's hot
Emacs on WSL
Emacs on WSL
kai2nenobu
Building confidence in concurrent code with a model checker: TLA+ for program...
Building confidence in concurrent code with a model checker: TLA+ for program...
Scott Wlaschin
Try Jetpack Compose
Try Jetpack Compose
LutasLin
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
정혜인 포트폴리오
정혜인 포트폴리오
henni31
The redux saga begins
The redux saga begins
Daniel Franz
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013
Scott Wlaschin
Testando API REST - Parte 1
Testando API REST - Parte 1
alinebiath
Dependency injection in CakePHP
Dependency injection in CakePHP
markstory
Idiomatic Kotlin
Idiomatic Kotlin
intelliyole
RxSwift to Combine
RxSwift to Combine
Bo-Young Park
20171104 FRP 패러다임
20171104 FRP 패러다임
Chiwon Song
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patterns
Łukasz Chruściel
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
ssuser2601f7
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
Ryan Park
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Jorge Vásquez
디지털 마케팅 스쿨 5기_개인프로젝트 신하나
디지털 마케팅 스쿨 5기_개인프로젝트 신하나
Hana Shin
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
Johnny Sung
Android Jetpack Compose - Turkey 2021
Android Jetpack Compose - Turkey 2021
Nelson Glauber Leal
Kotlin
Kotlin
Ahmad Mahagna
What's hot
(20)
Emacs on WSL
Emacs on WSL
Building confidence in concurrent code with a model checker: TLA+ for program...
Building confidence in concurrent code with a model checker: TLA+ for program...
Try Jetpack Compose
Try Jetpack Compose
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
정혜인 포트폴리오
정혜인 포트폴리오
The redux saga begins
The redux saga begins
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013
Testando API REST - Parte 1
Testando API REST - Parte 1
Dependency injection in CakePHP
Dependency injection in CakePHP
Idiomatic Kotlin
Idiomatic Kotlin
RxSwift to Combine
RxSwift to Combine
20171104 FRP 패러다임
20171104 FRP 패러다임
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patterns
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorld
디지털 마케팅 스쿨 5기_개인프로젝트 신하나
디지털 마케팅 스쿨 5기_개인프로젝트 신하나
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
Android Jetpack Compose - Turkey 2021
Android Jetpack Compose - Turkey 2021
Kotlin
Kotlin
Similar to 알아보자 Dependency Injection과 Deli
The definitive guide to java agents
The definitive guide to java agents
Rafael Winterhalter
Griffon @ Svwjug
Griffon @ Svwjug
Andres Almiray
Java byte code in practice
Java byte code in practice
Rafael Winterhalter
Desarrollo para Android con Groovy
Desarrollo para Android con Groovy
Software Guru
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features Summary
Amal Khailtash
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Oleksandr Stepanov
Intro programacion funcional
Intro programacion funcional
NSCoder Mexico
Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9
Ismar Silveira
E:\Plp 2009 2\Plp 9
E:\Plp 2009 2\Plp 9
Ismar Silveira
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Java User Group Latvia
Удобный и расширяемый роутинг в iOS-приложении / Тимур Юсипов (Avito)
Удобный и расширяемый роутинг в iOS-приложении / Тимур Юсипов (Avito)
Ontico
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
AvitoTech
DotNet Conference: code smells
DotNet Conference: code smells
Fernando Escolar Martínez-Berganza
What do you mean it needs to be Java based? How jython saved the day.
What do you mean it needs to be Java based? How jython saved the day.
Mark Rees
Taming Core Data by Arek Holko, Macoscope
Taming Core Data by Arek Holko, Macoscope
Macoscope
Working effectively with legacy code
Working effectively with legacy code
ShriKant Vashishtha
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
AvitoTech
Code generation for alternative languages
Code generation for alternative languages
Rafael Winterhalter
Javascript Design Patterns
Javascript Design Patterns
Subramanyan Murali
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
NAVER Engineering
Similar to 알아보자 Dependency Injection과 Deli
(20)
The definitive guide to java agents
The definitive guide to java agents
Griffon @ Svwjug
Griffon @ Svwjug
Java byte code in practice
Java byte code in practice
Desarrollo para Android con Groovy
Desarrollo para Android con Groovy
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features Summary
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Intro programacion funcional
Intro programacion funcional
Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9
E:\Plp 2009 2\Plp 9
E:\Plp 2009 2\Plp 9
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Удобный и расширяемый роутинг в iOS-приложении / Тимур Юсипов (Avito)
Удобный и расширяемый роутинг в iOS-приложении / Тимур Юсипов (Avito)
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
DotNet Conference: code smells
DotNet Conference: code smells
What do you mean it needs to be Java based? How jython saved the day.
What do you mean it needs to be Java based? How jython saved the day.
Taming Core Data by Arek Holko, Macoscope
Taming Core Data by Arek Holko, Macoscope
Working effectively with legacy code
Working effectively with legacy code
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
Code generation for alternative languages
Code generation for alternative languages
Javascript Design Patterns
Javascript Design Patterns
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
Recently uploaded
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Neo4j
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
Puma Security, LLC
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
Results
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
Principled Technologies
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Enterprise Knowledge
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Miguel Araújo
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Maria Levchenko
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Rafal Los
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
V3cube
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
wesley chun
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
apidays
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
hans926745
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
The Digital Insurer
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
RTylerCroy
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Delhi Call girls
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Drew Madelung
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Igalia
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
Enterprise Knowledge
How to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
naman860154
Recently uploaded
(20)
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
How to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
알아보자 Dependency Injection과 Deli
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class SuperRobotHand {} class
RobotHand {} class Robot { let hand: RobotHand = RobotHand() }
19.
class SuperRobotHand {} class
RobotHand {} class Robot { let hand: RobotHand = RobotHand() }
20.
protocol RobotHand {} class
NormalRobotHand: RobotHand {} class SuperRobotHand: RobotHand {} class Robot { let hand: RobotHand = NormalRobotHand() }
21.
protocol RobotHand {} class
NormalRobotHand: RobotHand {} class SuperRobotHand: RobotHand {} class Robot { let hand: RobotHand = NormalRobotHand() }
22.
23.
24.
protocol RobotHand {} protocol
RobotBody {} class NormalRobotHand: RobotHand {} class SuperRobotHand: RobotHand {} class CoolRobotBody: RobotBody {} class CuteRobotBody: RobotBody {} class Robot { init(hand: RobotHand, body: RobotBody) { ... } } class Factory { func makeRobot() -> Robot { return Robot(hand: SuperRobotHand(), body: CuteRobotBody()) } }
25.
class Factory { func
makeRobot() -> Robot { return Robot(hand: SuperRobotHand(), body: CuteRobotBody()) } }
26.
class Robot { ///
Property Injection let hand: RobotHand = NormalRobotHand() /// Constructor Injection init(body: RobotBody) { self.hand = hand self.body = body } }
27.
28.
class SeoulFactory { let
robot = Robot( hand: SuperRobotHand(), body: CuteRobotBody() ) } class IncheonFactory { let robot = Robot( hand: SuperRobotHand(), body: CuteRobotBody() ) }
29.
30.
IoC(Inversion of Control)를
구현하는 프레임워크로 객체를 관리하고, 객체의 생성을 책임지고, 의존성을 관리하는 컨테이너이다.
31.
32.
protocol RobotType {} class
Robot: RobotType { ... } class SeoulFactory { let robot = Container.get(RobotType.self) } class IncheonFactory { let robot = Container.get(RobotType.self) }
33.
34.
35.
36.
37.
38.
39.
40.
@UIApplicationMain class AppDelegate: UIResponder,
UIApplicationDelegate { // weaver: movieManager = MovieManager <- MovieManaging // weaver: movieManager.scope = .container } protocol MovieManaging {} class MovieManager: MovieManaging {}
41.
DEFINITIONS: - service: MovieManaging component:
MovieManager
42.
interface MovieManaging {} @Component class
MovieManager() : MovieManaging {}
43.
protocol MovieManaging {} class
MovieManager: MovieManaging, Component {}
44.
45.
46.
protocol UserService { func
login(id: String, password: String) -> User? func logout() } class UserServiceImpl: UserService, Component { func login(id: String, password: String) -> User? { ... } func logout() { ... } init() {} }
47.
48.
class LoginViewModel: Autowired
{ let userService: UserService required init(_ userService: UserService) { self.userService = userService } }
49.
class LoginViewModel: Autowired
{ let userService: UserService required init(_ userService: UserService) { self.userService = userService } }
50.
UserService UserServiceImpl LoginViewModel IoC Container
51.
52.
class FriendListViewModel: Autowired
{ func generateInfo(by id: String) -> FriendInfoViewModel? { let friend = friendService.getFriend(by: id) return Inject( FriendInfoViewModel.self, with: ( userID: friend.id, cachedName: friend.name ) ) } }
53.
class FriendListViewModel: Autowired
{ func generateInfo(by id: String) -> FriendInfoViewModel? { let friend = friendService.getFriend(by: id) return Inject( FriendInfoViewModel.self, with: ( userID: friend.id, cachedName: friend.name ) ) } }
54.
class FriendPayload: Payload
{ required init( with argument: (userID: String, cachedName: String) ) { ... } } class FriendInfoViewModel: AutowiredFactory { required init( _ accountService: AccountService, payload: FriendPayload ) { ... } }
55.
class FriendPayload: Payload
{ required init( with argument: (userID: String, cachedName: String) ) { ... } } class FriendInfoViewModel: AutowiredFactory { required init( _ accountService: AccountService, payload: FriendPayload ) { ... } }
56.
class FriendPayload: Payload
{ required init( with argument: (userID: String, cachedName: String) ) { ... } } class FriendInfoViewModel: AutowiredFactory { required init( _ accountService: AccountService, payload: FriendPayload ) { ... } }
Download now