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
Hello, ReactorKit
Hello, ReactorKit
Suyeol Jeon
Presentation Spring, Spring MVC
Presentation Spring, Spring MVC
Nathaniel Richand
Multiplatform architecture ribs in swift
Multiplatform architecture ribs in swift
NAVER Engineering
Gestion comptes bancaires Spring boot
Gestion comptes bancaires Spring boot
Abdelhakim HADI ALAOUI
RxSwift Testing 같이 시작하기 feat. RxBlocking, RxTest
RxSwift Testing 같이 시작하기 feat. RxBlocking, RxTest
Byeongchan Lee
Ajax ppt - 32 slides
Ajax ppt - 32 slides
Smithss25
Testing Spring Boot application in post-JUnit 4 world
Testing Spring Boot application in post-JUnit 4 world
Yura Nosenko
DI Container를 이용하여 레거시와 모듈화를 동시에 잡기
DI Container를 이용하여 레거시와 모듈화를 동시에 잡기
정민 안
Recommended
Hello, ReactorKit
Hello, ReactorKit
Suyeol Jeon
Presentation Spring, Spring MVC
Presentation Spring, Spring MVC
Nathaniel Richand
Multiplatform architecture ribs in swift
Multiplatform architecture ribs in swift
NAVER Engineering
Gestion comptes bancaires Spring boot
Gestion comptes bancaires Spring boot
Abdelhakim HADI ALAOUI
RxSwift Testing 같이 시작하기 feat. RxBlocking, RxTest
RxSwift Testing 같이 시작하기 feat. RxBlocking, RxTest
Byeongchan Lee
Ajax ppt - 32 slides
Ajax ppt - 32 slides
Smithss25
Testing Spring Boot application in post-JUnit 4 world
Testing Spring Boot application in post-JUnit 4 world
Yura Nosenko
DI Container를 이용하여 레거시와 모듈화를 동시에 잡기
DI Container를 이용하여 레거시와 모듈화를 동시에 잡기
정민 안
Kotlin
Kotlin
Rory Preddy
Introduction à React JS
Introduction à React JS
Abdoulaye Dieng
The redux saga begins
The redux saga begins
Daniel Franz
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP
Chiwon Song
introduction to Vue.js 3
introduction to Vue.js 3
ArezooKmn
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
정민 안
Redux Sagas - React Alicante
Redux Sagas - React Alicante
Ignacio Martín
iOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
정민 안
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
Mintak Son
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
정민 안
ASP.NET Web API
ASP.NET Web API
habib_786
React js
React js
Oswald Campesato
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
ENSET, Université Hassan II Casablanca
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
ENSET, Université Hassan II Casablanca
Intro to Three.js
Intro to Three.js
Kentucky JavaScript Users Group
Developer Tutorial: WebAuthn for Web & FIDO2 for Android
Developer Tutorial: WebAuthn for Web & FIDO2 for Android
FIDO Alliance
React Native Firebase
React Native Firebase
Kobkrit Viriyayudhakorn
Support de cours Spring M.youssfi
Support de cours Spring M.youssfi
ENSET, Université Hassan II Casablanca
Firebase Auth Tutorial
Firebase Auth Tutorial
Bukhori Aqid
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
Kotlin
Kotlin
Rory Preddy
Introduction à React JS
Introduction à React JS
Abdoulaye Dieng
The redux saga begins
The redux saga begins
Daniel Franz
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP
Chiwon Song
introduction to Vue.js 3
introduction to Vue.js 3
ArezooKmn
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
정민 안
Redux Sagas - React Alicante
Redux Sagas - React Alicante
Ignacio Martín
iOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
정민 안
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
Mintak Son
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
정민 안
ASP.NET Web API
ASP.NET Web API
habib_786
React js
React js
Oswald Campesato
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
ENSET, Université Hassan II Casablanca
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
ENSET, Université Hassan II Casablanca
Intro to Three.js
Intro to Three.js
Kentucky JavaScript Users Group
Developer Tutorial: WebAuthn for Web & FIDO2 for Android
Developer Tutorial: WebAuthn for Web & FIDO2 for Android
FIDO Alliance
React Native Firebase
React Native Firebase
Kobkrit Viriyayudhakorn
Support de cours Spring M.youssfi
Support de cours Spring M.youssfi
ENSET, Université Hassan II Casablanca
Firebase Auth Tutorial
Firebase Auth Tutorial
Bukhori Aqid
What's hot
(20)
Kotlin
Kotlin
Introduction à React JS
Introduction à React JS
The redux saga begins
The redux saga begins
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP
introduction to Vue.js 3
introduction to Vue.js 3
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
Redux Sagas - React Alicante
Redux Sagas - React Alicante
iOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
ASP.NET Web API
ASP.NET Web API
React js
React js
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
Intro to Three.js
Intro to Three.js
Developer Tutorial: WebAuthn for Web & FIDO2 for Android
Developer Tutorial: WebAuthn for Web & FIDO2 for Android
React Native Firebase
React Native Firebase
Support de cours Spring M.youssfi
Support de cours Spring M.youssfi
Firebase Auth Tutorial
Firebase Auth Tutorial
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
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Remote DBA Services
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
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
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Roshan Dwivedi
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
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
Gabriella Davis
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
Anna Loughnan Colquhoun
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
UK Journal
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
The Digital Insurer
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
The Digital Insurer
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
MIND CTI
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Martijn de Jong
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
The Digital Insurer
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
apidays
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
SynarionITSolutions
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Khem
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
sudhanshuwaghmare1
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
wesley chun
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
The Digital Insurer
Recently uploaded
(20)
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
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...
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
알아보자 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