<h1><center> iOS interview 10 </center></h1> ###### tags: `๐Ÿ’ป ๋ฉด์ ‘ ์งˆ๋ฌธ` ###### date: `2025-11-0217:21:33.284Z` > [iOS interview](https://github.com/JeaSungLEE/iOSInterviewquestions) ## ๊ทผํ™ฉ https://skillbuilder.aws/ - ๋ฐ”์˜๊ฒŒ ์ง€๋ƒˆ์–ด์š”! - ์ง€๋‚œ์ฃผ ์ด๋ ฅ์„œ ์–ด๋–ป๊ฒŒ ์“ฐ๋ฉด ์ข‹์„๊นŒ? - ์ด๋Ÿฐ ์ €๋Ÿฐ ์ผ๋“ค ๋‹ค ์ผ๋‹จ ์จ๋ณด๊ณ (๋ฆฌ์ŠคํŠธ์—…) - ์ •๋ฆฌํ•ด ๋‚˜๊ฐ€๋ณด์ž - (ํ•˜์ง€๋งŒ ์•„์ง ๋ชปํ–ˆ์–ด์š”..) ## ๋ชฉํ‘œ (์ง€๋‚œ ์ˆ™์ œ) - DI์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ •๋ง ํ•„์š”ํ• ๊นŒ? - Needle - DI์—์„œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ฃผ๊ธฐ - DIContainer์— registerํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ >> Needle, Swinject > Assembly < SwiftUI?? - **swift-dependencies** > TCA์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ | TCA๊ฐ€ ๊ฑฐ์˜ ํ‘œ์ค€... > ๋ชจ๋ฅด๊ณ  ์“ฐ๋Š” ์‚ฌ๋žŒ๋„ ๋งŽ์•„... ``` swift protocol Network { func request() } // DependencyKey ์ •์˜ struct CoreDependecnyKey: DependencyKey { let network: Network let hello: () -> () /// DependencyKey ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’ /// ์ด ๊ฐ’ ์ž์ฒด๊ฐ€ static์ด๋‹ˆ๊น ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์‚ด์•„์žˆ๋Š” ๊ฒƒ์ด๋‹ค!! static let liveValue: CoreDependencyKey = { @Dependency(\.token) var token // ๊ฐ’ ํƒ€์ž…, ์ฐธ์กฐํƒ€์ž…์„ ์™œ ๋” ์‹ ๊ฒฝ์“ฐ๊ฒŒ ๋œ ๊ฑธ๊นŒ์š”? return CoreDependencyKey( // ์•„์˜ˆ ์ƒ์„ฑ์„ ํ•ด๋ฒ„๋ฆผ, ์•ฑ ์‹คํ–‰๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์‚ด์•„์žˆ์Œ network: NetworkImpl(token: token), // Swinject์™€ ๊ฐ™์ด ๊ฐ์ฒด ์ƒ์„ฑ์ฃผ๊ธฐ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์—†์Œ // Swinject๋Š” register์‹œ์— singleton ์‚ด๋ฆด๋ž˜..? ์•„๋‹ˆ๋ฉด ์‚ฌ์šฉ์ฒ˜์—์„œ ์ž ๊น ์‚ด๊ฒŒ ๋‘˜๋ž˜..? - inobjectscope hello: { print("Hello world!!") } ) }() /// ํ…Œ์ŠคํŠธ static let testValue: CoreDependencyKey = { return CoreDependencyKey( ) }() } // Swift-Dependency์— ๋“ฑ๋ก extension DependecnyValues { var core: DependencyKey { // ์—ฌ๊ธฐ์„œ DependencyKey์˜ liveValue get { self[CoreDependencyKey.self] } set { self[CoreDependencyKey.self] = newValue } } var coreTest: DepencyKey { get { self[CoreDependencyKey.self] } set { self[CoreDependencyKey.self] = newValue } } } /// ์‚ฌ์šฉ์ฒ˜ @Dependency(\.core.network) var network // ์ˆ˜ํ‰์  ํ™•์žฅ // ์ด๊ฒŒ ๊ถŒ์žฅํ•˜๋Š” ํ‘œํ˜„ @Dependency(\.core) var core core.hello() @Reducer struct HelloReducer { @ObservableState struct State { } enum Action { case hello } @Dependency(\.core) var core @Dependency(\.core.network) var network var body: some ReducerOf<Self> { Reduce { state, action in switch action { case .hello: return .run { send in core.hello() } } } } } @Observable class Hello { @ObservedIgnored @Dependency(\.core) var core } ``` 1. ์ž์œ ๋„๊ฐ€ ๋„ˆ๋ฌด ๋†’์•„... ์ข€ ์–ด๋ ค์›Œ... 2. ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„๊ฐ€ ๋˜์–ด์žˆ๋‹ค. - ๊ตฟ๊ตฟ 3. ์“ฐ๊ธฐ ํŽธํ•จ ### ๋ฌด์—‡์„ ํ•  ๊ฒƒ ์ธ๊ฐ€? - ๋ฉด์ ‘์—์„œ ๋ง #### Lifecycle ์š”์•ฝ **1. Transient** ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋œ๋‹ค. ๊ฐ„๋‹จํ•œ Stateless ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜๋‹ค. **2. Scoped** ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๋ถ€ํ„ฐ ์‘๋‹ต๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ˆ˜ ๋งŒํผ ์กด์žฌ๋  ์ˆ˜ ์žˆ๋‹ค. **3. Singleton** ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ๊ณผ ๊ด€๊ณ„ ์—†์ด ์›น์„œ๋น„์Šค ์‹œ์ž‘๋  ๋•Œ๋ถ€ํ„ฐ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งŽ์•„๋„ ์˜ค์ง 1๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.