<h1><center> iOS interview 5 </center></h1> ###### tags: `๐Ÿ’ป ๋ฉด์ ‘ ์งˆ๋ฌธ` ###### date: `2025-09-2717:21:33.284Z` > [iOS interview](https://github.com/JeaSungLEE/iOSInterviewquestions) # iOS Liquid Glass ์ ์šฉํ•˜๊ธฐ - Apple Session ## Liquid Glass์˜ ์ธ์‚ฌ์ดํŠธ์™€ ๋””์ž์ธ ํŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ Liquid Glass๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์›Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜? - ๋””์ž์ธ ์–ธ์–ด๋ฅผ ๊ฐœํŽธํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋ ๊นŒ? Liquid Glass โ‡’ Regular vs Clear Clear โ‡’ ์˜์ƒ์ด ๋ฐ๋“  ์–ด๋‘ก๋“  background ์ƒ‰์ƒ์ด ๋ฐ”๋€Œ์ง€ ์•Š์Œ but, clear๋Š” ๋” ํˆฌ๋ช…์„ฑ์„ ๊ฐ–๋Š”๋‹ค. - ์˜์ƒ์„ ์ง„ํ–‰ํ•  ๋•Œ ์“ฐ๋Š” ๊ฒƒ์„ ๋” ์ถ”์ฒœํ•œ๋‹ค โ‡’ ์Œ์•… playback - (๋ฏธ๋ฆฌ๋“ฃ๊ธฐ) / ์ปจํ…์ธ  ์žฌ์ƒ์‹œ ์˜ค๋ฒ„๋ง > Scroll Edge Effect > Soft Style โ‡’ iOS Safari์™€ ๊ฐ™์€ ๊ฒฝ์šฐ - ์ค„์—ฌ๋‚˜๊ฐ€๋Š” ๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. Hard Style ### Component โ‡’ ์–ด๋–ป๊ฒŒ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ Liquid glass๋ฅผ ์ ์šฉํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‚˜? 1. ํˆด ๋ฐ” 1. concentric โ‡’ ๊ธฐ๊ธฐ Bazel ๊ธฐ๋ฐ˜ Radius๋ฅผ ์„ค์ •ํ•œ๋‹ค. - inner circle ์™„์„ฑ 2. ์ปจํ…์ธ  ๋ ˆ์ด์–ด์— ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ ˆ์ด์–ด๊ฐ€ ๋„์–ด์ ธ ์žˆ๋‹ค. โ‡’ ์˜คํžˆ๋ ค ์ฝ˜ํ…์ธ  ์˜์—ญ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋งŒ๋“ฆ 3. Optical Concentric์„ ์ ์šฉํ•จ โ‡’ ์‹ค์ œ ์›ํ˜•์„ ๋งค์นญํ•˜์ง€ ์•Š์Œ 4. System Component๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๊ธฐ edge์— ๊ฐ€๊นŒ์›Œ์งˆ ์ˆ˜๋ก ๊ณก๋ฅ ์ด ์กฐ์ •๋จ 5. ์œ„์— 44pt / ๋ฐ‘์— 48pt๋ฅผ ์ ์šฉํ•œ๋‹ค. 2. ํƒญ ๋ฐ” 1. ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ์ด ๊ผญ ๋ฐ‘์— ์žˆ์„ ํ•„์š”๋Š” ์—†๋‹ค. 2. accessories view โ‡’ ํƒญ ๋ฐ” ์œ„์— ์œ„์น˜ํ•œ ๋ทฐ - ex) ์• ํ”Œ ๋ฎค์ง ํ”Œ๋ ˆ์ด ๋ฐ” 3. ์‹œํŠธ 1. ํŒ์—…์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. Glass Material ์•ˆ์— Glass Material์„ ์“ฐ๋ฉด ์ข‹์ง€ ์•Š๋‹ค. - https://medium.com/design-warp/skeuomorphism-design-we-learned-to-outgrow-8a24895a80d0 - https://www.google.com/url?sa=i&url=https%3A%2F%2Fmedium.com%2Fdesign-warp%2Fskeuomorphism-design-we-learned-to-outgrow-8a24895a80d0&psig=AOvVaw0ivdF2LcZVqeRRPIv1Djkc&ust=1759018988989000&source=images&cd=vfe&opi=89978449&ved=0CBUQjRxqFwoTCIiryMTW948DFQAAAAAdAAAAABAu - https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.apple.com%2Fkr%2Fnewsroom%2F2025%2F06%2Fapple-introduces-a-delightful-and-elegant-new-software-design%2F&psig=AOvVaw281CwdmEs7vJLBnS2-bg7A&ust=1759019175997000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCOCc1JvX948DFQAAAAAdAAAAABAE - https://en.zicos.com/mac/i32293944-How-to-turn-off-and-tone-down-the-iOS-26-features-you-hate-the-most.html ### App Icon - Symbol์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๋ฐ? - Icon Composer โ‡’ ๋””์ž์ด๋„ˆ๋“ค์ด ๋น ๋ฅด๊ฒŒ ์ปค์Šคํ…€์ด ๊ฐ€๋Šฅํ•œ ์•„์ด์ฝ˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ์ œ๊ณตํ•จ ใ…Œใ…ˆใ…ˆ ### ์˜ค๋Š˜ ํ•œ ๊ฒƒ๊ณผ ์ข€ ๋” ๋ด์•ผํ•  ๊ฒƒ 1. TaskLocal => ๋ฐ”์ธ๋”ฉ, TCA ๊ฐœ๋… - ์‹ค์ œ๋กœ ์“ฐ๋Š” ์‚ฌ๋ก€... ### ๋‹ค์Œ์— ํ•  ๊ฒƒ 1. โญ๏ธ **Shared Mutable State** 2. Task isolation 3. Race Condition ๋ฌธ์ œ 4. Sendable 5. actor ๊ฐœ๋…๋งŒ... ## Actor / AsyncStream - AsyncStream ## Shared Mutable State > ๊ณต์œ  ๊ฐ€๋ณ€ ์ƒํƒœ => ๊ณต์œ ๊ฐ€ ๋˜๋ฉด์„œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ > '๊ณต์œ ' -> ๋ฉ”๋ชจ๋ฆฌ์ƒ Data, Heap์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ > '์ž„๊ณ„ ์˜์—ญ' -> Thread๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต์˜ ์ž์› ์˜์—ญ > ##### ๊ณต์œ  ๊ฐ€๋ณ€ ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋Š” Thread-safety ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ### Race Condition ๋ฌธ์ œ -> ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์ ‘๊ทผํ–ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฑฐ #### Swift Code์ƒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค 1. ์ „์—ญ ๋ณ€์ˆ˜ / static var -> ๋ฉ”๋ชจ๋ฆฌ ์ƒ Data ์˜์—ญ์—์„œ ๊ณต์œ ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. 2. class ํƒ€์ž…์˜ var -> ๋ฉ”๋ชจ๋ฆฌ์ƒ Heap์—์„œ ๊ณต์œ ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. 3. โญ๏ธclosure / Task์— ์บก์ณ๋œ ๋ณ€์ˆ˜ ``` swift // 3๋ฒˆ Closure / Task์— ์บก์ณ๋œ ๋ณ€์ˆ˜ func test() { var name: String = "ํ…Œ์ŠคํŠธ" Task { name = "Liquid glass" } Task { name = "Kakao" } Task { [name] in // ์ด๋Ÿฌ๋ฉด ๊ดœ์ฐฎ์„๊ฑธ? var newName = name newName = "Apple" } } ``` -> (์•ˆ์ง„) ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ์— actor๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๊ฑด๊ฐ€์š”? => Yes but, it's not only solution. -> (์•ˆ์ง„) ํ˜น์‹œ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ Swift6์—์„œ๋Š” ์ปดํŒŒ์ผ์—์„œ ์žก์•„์ฃผ๋‚˜์š”..? ์•„์•„ ์˜ค ๊ทธ๋ž˜์š”? ใ…‹ใ…‹ใ…‹ #### ๊ฒฐ๋ก  1. Swift Concurrency๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition)์„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•˜๋„๋ก ํ•ด์คŒ 2. ์ƒˆ๋กœ์šด ์ฐธ์กฐ ํƒ€์ž…์„ ๋„์ž…ํ•ด ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•จ ## Task isolation > Task isolation์„ ์™œ ์ง€์ผœ์•ผํ•˜๋‚˜? Race condition์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์ž‘์—… ์ฒ˜๋ฆฌ #### ์ „์ œ ์กฐ๊ฑด 1. ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—… ๊ฐ„์— Share Mutable State๋ฅผ ๋ฐฉ์ง€ํ•จ (์•ˆ์ง„) ๋„ค ์ €๋Š” ์ฐพ๋‹ค๋ณด๋‹ˆ **actor isolation** ์–ธ๊ธ‰์ด ๋งŽ๋„ค์š” ๊ทธ๋ž˜์„œ ์ด ๊ฐœ๋…์ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ๋ณด๊ณ  ์žˆ์—ˆ์–ด์š” Task isolation์€ Task ๋‚ด๋ถ€ ์ •์˜๋œ ๊ฐ’์€ ํ•ด๋‹น Task๋งŒ ์ ‘๊ทผ? ๋‹ค๋ฅธ Task์™€ ๊ณต์œ ๋˜์ง€ ์•Š์Œ ๊ทผ๋ฐ ํด๋กœ์ € ์บก์ฒ˜, ์ „์—ญ ๋ณ€์ˆ˜, ์ฐธ์กฐ ํƒ€์ž…๋“ฑ์„ ๊ณต์œ ํ•˜๋Š” ์ˆœ๊ฐ„ isolation์ด ๊นจ์ง€๋ฉด์„œ race condition ๊ฐ€๋Šฅ => ๊ฐ๊ฐ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” Task ์ž‘์—… ๊ฐ„์˜ ์•ˆ์ „ํ•œ ํƒ€์ž… ์ „๋‹ฌ์ด Task isolation์„ ์ง€์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค. Actor isolation์€ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•จ ๊ทธ๋ž˜์„œ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€๊ฑฐ ์žˆ์Œ? Task๋Š” ์›๋ž˜ isolationํ•ด์•ผ ํ•˜๋Š”๋ฐ Actor๋กœ ํ•ด์„œ ์จ๋ผ ์ด๋Ÿฐ ๋А๋‚Œ ๊ฐ™์€๋ฐ์š”? ๊ทธ๋Ÿผ Actor๊ฐ€ ์•Œ์•„์„œ ๊ณต์œ  ์ƒํƒœ ๊ด€๋ฆฌํ•ด์คŒ ํ•œ ๋ฒˆ์— ํ•œ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•˜๊ฒŒ ํ• ๊ฒŒ.. ์ด๋Ÿฐ๊ฑฐ? nonisolated? (ํƒœํ˜„) @MainActor ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ Actor ๋“ฑ์œผ๋กœ isolation ๋˜์–ด ์žˆ์œผ๋ฉด ์ผ๋ถ€๋Ÿฌ ๊ฒฉ๋ฆฌ๋ฅผ ๊นจ๋ฒ„๋ฆฌ๋Š”๊ฒƒ ๊ฐ™์•„์š”... -> ์•ˆ์ง„์ด ์“ฐ๊ธด ํ•จ.. ใ…œใ…œ => (ํƒœ์œค) ์ด๊ฑด actor isolated๋ฅผ ๋ณด๊ณ  ์ด์•ผ๊ธฐ ํ•˜๋Š”๊ฒŒ ์ข‹๊ฒ ๋‹ค. ``` non ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋Œ๋ฆฐ๋‹ค @concurrent func a() { } ``` Task isolation ๊ฒฐ๊ตญ -> actor ํ•ด๋ผ ์ด ๊ฐœ๋… ์•„๋‹Œ๊ฐ€์š”? ### Task isolation '๋ฒ•์น™'์„ ๊นจ๋Š” ๊ฒฝ์šฐ - 'race condition' ์•ˆ ์ผ์–ด๋‚˜๋„๋ก ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณด์žฅ? - ๊ทผ๋ฐ ```swift struct Hello { var value = 0 mutating func increment() { value += 1 } } // Closure, Task Capture๋œ ๋ณ€์ˆ˜ ์œ„๋ฐฐ func breakTaskIsolated() { var hello = Hello() Task { // ์—ฌ๊ธฐ์„œ hello ๋ณ€์ˆ˜๋Š” heap์— ์บก์ณ๋จ hello.increment() } sleep(3) print(hello.value) // 1 - ์—ฅ๊ฐ„ํ•˜๋ฉด? } ``` -> ์˜ค๋ฅ˜๋Š” ์•ˆ๋œธ ์‚ฌ์‹ค Task isolation์€ ๊ทธ๋ƒฅ ์–ด๋–ค ๊ฐœ๋…๊ฐ™์€ ์ˆ˜์ค€์ด๊ตฐ์š”? ๊นจ๋ฉด ๊นจ์ง€๊ณ  ๋ณ€์ˆ˜ ์ž˜๋ชป ์ฐธ์กฐํ•ด์˜ค๋ฉด ๊ทธ๋ƒฅ ๊ฐœ๋ฐœ์ž ์ž˜๋ชป์œผ๋กœ ๊นจ์ง€๊ณ  > "Task isolation์€ โ€œ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ์›์น™โ€์ด๋ผ๋Š” Swift Concurrency์˜ ๊ธฐ๋ณธ ์ฒ ํ•™์„ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ๊ตฌํ˜„ํ•œ ๊ทœ์น™" ใ…‹ใ…‹ใ…‹๊ทธ๋ž˜์„œ Swift6 ์˜ฌ๋ฆฌ๋ ค๋ฉด ๋งํ•˜๋Š”.. ๊ทผ๋ฐ ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€.. ## Sendable > ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋Š” Protocol Swift์—์„œ ์•ˆ์ „ํ•จ์ด ๋ณด์žฅ๋œ ํƒ€์ž…์€ ๊ทธ๋ƒฅ ์ฑ„ํƒ๋งŒ ํ•ด๋„ ๋œ๋‹ค. ##### Sendable์€ Marker Protocol - ์š”๊ตฌ์‚ฌํ•ญ์ด ๋”ฐ๋กœ ์—†๋Š” ํ”„๋กœํ† ์ฝœ / ๋‹จ์ˆœํžˆ ๋™์‹œ์„ฑ ์˜์—ญ ๊ฐ„ ์ „๋‹ฌ์ด ์•ˆ์ „ํ•œ ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์„ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์•Œ๋ ค์คŒ ```swift // marker protocol public protocol Sendable { } // Lint: Stored property 'name' of 'Sendable'-conforming class 'Test' is mutable; this is an error in the Swift 6 language mode final class Test: Sendable { var name: String // final ํ•ด์„œ ์›๋ž˜ ์˜ค๋ฅ˜๋‚˜ ๊ฒฝ๊ณ  ์—†์—ˆ๋Š”๋ฐ, ๋ณ€์ˆ˜ ์ƒ๊ธฐ๋ฉด์„œ ๋ฆฐํŠธ๋œธ static var greeting: String = "hi" // ์ด๊ฑด ์˜ค๋ฅ˜ ์•ˆ๋œธ } ``` - ํ”„๋กœํ† ์ฝœ๋กœ์„œ๋Š” ์•„๋ฌด ๊ตฌํ˜„ ์š”๊ตฌ์‚ฌํ•ญ์ด ์—†์œผ๋‚˜, - ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํŠน๋ณ„ํžˆ ํ•ด์„ํ•ด์„œ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•จ (sendableํ•œ ์นœ๊ตฌ๋“ค) - ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์Œ Sendable ํ•˜๊ตฌ๋งŒ... ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ์นœ๊ตฌ๋“ค - ๊ฐ’ ํƒ€์ž… - Immutable class - var ์—†๋Š” ๊ฐ’ ํƒ€์ž…์ธ ์ €์žฅ ํ”„๋กœํผํ‹ฐ + final๋กœ ์ƒ์† ๋ถˆ๊ฐ€ (class ๋‚ด๋ถ€์— static ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด..? ์ƒ๊ด€ ์—†๋‚˜? => static ๋ณ€์ˆ˜ ๋”ฐ๋กœ Sendable ํ•˜์ง€ ์•Š์Œ) - class์—์„œ sendable์„ ์ฑ„ํƒํ•˜๋ฉด ๋‚ด๋ถ€ ์ €์žฅํ”„๋กœํผํ‹ฐ๋„ sendable ํ•ด์•ผํ•จ - NSLock, Semaphore๋กœ class ๋‚ด๋ถ€์—์„œ ๋™๊ธฐํ™”์ฒ˜๋ฆฌ -> ์ด๊ฑธ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํŒŒ์•…์„ ํ•˜๋‚˜? - Actor ํƒ€์ž… - Functions and closures (by marking them with @Sendable) (ํƒœํ˜„) - Sendable์€ Thread Safeํ•œ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฑด ์•„๋‹ˆ์ง€๋งŒ, ์• ์ดˆ์— Sendable์„ ์ฑ„ํƒํ•œ ๊ฐ์ฒด๋Š” ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ธ์‹ํ•œ๋‹ค? ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ #### ์ œ๋„ค๋ฆญ ํƒ€์ž…์—์„œ Sendable ```swift struct Pair<T, U> { } extension Pair: Sendable where T: Sendable, U: Sendable { } ``` # ์ž ๊น Continuation Continuation์€ ํ•˜์ง€๋งŒ ๋ถˆ์•ˆ์ •ํ•˜๋‹ค..? someLegacyAPI error์— ๋Œ€ํ•œ ๋Œ€์‘์ด ์—†๋‹ค? ๊ทผ๋ฐ ์•„์˜ˆ ๋ฐ”๊พธ๋Š”๊ฒŒ ์‰ฝ์ง€ ์•Š์œผ๋‹ˆ.. ์ด๋Ÿฐ๊ฑธ ์ œ๊ณตํ•ด์ค€๊ฒŒ ์•„๋‹๊นŒ... ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹์“ฐ๋ ˆ๊ธฐ์˜ ์“ฐ๋ ˆ๊ธฐ.. ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค ```swift func fetchData() async -> String { await withCheckedContinuation { continuation in someLegacyAPI { result in continuation.resume(returning: result) } } } func fetchData() async throws -> String { try await withCheckedThrowingContinuation { continuation in someLegacyAPI { result, error in if let error = error { continuation.resume(throwing: error) } else { continuation.resume(returning: result!) } } } } ``` (์ฐธ๊ณ ) ๋ฌธ๋“ ๊ถ๊ธˆํ•ด์„œ ๊ฐ€์ ธ์™”๋Š”๋ฐ ํŒŒํŠธ2์— ๋‚˜์˜ค๊ธด ํ•˜๋„ค์š”! (2) Part - 2์—์„œ ์ฃผ๋กœ ๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ (๋ณธ ๊ฐ•์˜) โญ๏ธโญ๏ธโญ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ Computer Science ๊ด€์ ์—์„œ ์ดํ•ดํ•˜๊ธฐ (์“ฐ๋ ˆ๋“œ/๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์˜ ์ดํ•ด) Data Isolation / Task Isolation / Actor Isolation (๊ฒฉ๋ฆฌ ๊ฐœ๋…์˜ ์ดํ•ด) Task Isolation๊ณผ Shared Mutable State (๊ณต์œ  ๋ฐ์ดํ„ฐ) Sendable ํƒ€์ž… (์“ฐ๋ ˆ๋“œ ๊ฐ„์— ๊ณต์œ ํ•ด๋„ ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…) Actor ์™„์ „ ์ •๋ณต (1) ๊ฒฉ๋ฆฌ/๋น„๊ฒฉ๋ฆฌ (2) ์›์ž์„ฑ (3) ์žฌ์ง„์ž… (4) ์•กํ„ฐ ํ™‰ํ•‘ (5) ๋ฉ”์ธ์•กํ„ฐ ๋ธ”๋กœํ‚น (6) ์•กํ„ฐ ๊ฒฝํ•ฉ ํ•ด๊ฒฐํ•˜๊ธฐ ๊ธ€๋กœ๋ฒŒ ์•กํ„ฐ์™€ ๋ฉ”์ธ์•กํ„ฐ ์•กํ„ฐ๋กœ ์บ์‹œ(cache) ๊ตฌํ˜„ํ•˜๊ธฐ ํ”„๋กœ์ ํŠธ ์˜ˆ์‹œ AsyncSequence (๋น„๋™๊ธฐ ์‹œํ€€์Šค)์™€ AsyncStream (๋น„๋™๊ธฐ ์ŠคํŠธ๋ฆผ) ์›น์†Œ์ผ“์— AsyncStream ์ ์šฉํ•˜๊ธฐ ํ”„๋กœ์ ํŠธ ์˜ˆ์‹œ Non-Sendable ํƒ€์ž…์˜ ์ „์†ก (sending) ํ•จ์ˆ˜(ํด๋กœ์ €)์˜ ๊ฒฉ๋ฆฌ ๊ด€๋ จ ๋ฌธ์ œ - isolated (Actor)? = #isolation / @isolated(any) Custom ์‹คํ–‰์ž(Executor)์˜ ๊ตฌํ˜„ / Task ์‹คํ–‰์ž(Executor) ์„ ํ˜ธ๋„ (์ฐธ๊ณ ) consume / consuming ํ‚ค์›Œ๋“œ ์•กํ„ฐ์˜ ๋ฌธ๋ฒ• ๊ทœ์น™ ์‹ฌํ™” - ์ƒ์„ฑ์ž / ์†Œ๋ฉธ์ž / ํ”„๋กœํ† ์ฝœ / ์ƒ์† / ํ™•์žฅ Swift5 ์—์„œ Swift6๋กœ ๋„˜์–ด๊ฐ€๊ธฐ Instruments ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ ๋ถ„์„ํ•˜๊ธฐ ### ๋‹ค์Œ์ฃผ - Actor ์ผ๋‹จ ๊ฐ์žก๊ณ  ๊ณต๋ถ€๋ฅผ ๋นก์„ธ๊ฐœ ํ•ด์˜ฌ๊ฒŒ์š” ์ฃ„์†กํ•ด์šฅ ๊ฐ•์ œ๊ฐ•์ œ ๊ธด๊ธ‰๊ธด๊ธ‰ (์ € ๋‹ด์ฃผ ์™ธ๋ถ€ ๋ฏธํŒ…๋งŒ 4๊ฐœ๋ผ ํ .. ํ .. ๋„ค.. ํ‰ค,,) ์˜ค! ์˜ค ์กฐ์•„์š” ๊ทธ๋ฆฌ๊ณ  ์ €ํฌ ์ถ”์„์—๋„ ๋นก์„ธ๊ฒŒ ํ•ด๋ด์š” ใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Ž ์•„๋‡น ์ง‘ ์˜ˆ์ • ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์•”ํŠผ ๋‹ด์ฃผ ์•กํ„ฐ ํ•ด์˜ค๊ฒ ์–ด์š” - ์ถ”์„ ๋•Œ ๋ญ ํ• ์ง€? Concurrency ? Combine ? ์ €๋Š” ํšŒ์‚ฌ์—์„œ AI ํ•˜๋Š”๊ฒŒ ์žˆ์–ด์„œ ๊ทธ๊ฒƒ๋„ ๋ด์•ผํ•ด์š” RAG(๋ž˜๊ทธ)+๋žญ์ฒด์ธ ์–ด์ฉŒ๊ตฌ.. ํ‰ท ์•”ํŠผ ๋ญ๋ณผ์ง€ ์ƒ๊ฐํ•ด๋ณผ๊ฒŒ์š” ๊ตฟ๊ตฟ!! ๋˜์ง€๊ธฐ > ์ด๋ฒˆ์ฃผ์— ๋˜์ง€๊ณ  ํˆฌํ‘œ ํ›„ ๊ฒฐ์ • > 1. Coordinator? > 2. ๋””์ž์ธ ํŒจํ„ด ? ํ›”๋ƒ ๋„ต > 3. Unit Test๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์ ์šฉํ•˜๊ธฐ > 4. ํ† ์Šค ๊ณผ์ œ ํ”ผ๋“œ๋ฐฑํ•˜๊ธฐ https://github.com/DeveloperAcademy-POSTECH/2024-MacC-A10-Akdong-Cookiez -> ์ด๊ฑฐ Coordinator ์ด๋ฆ„์˜ ๋ฌด์–ธ๊ฐ€๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋Š” ํ”Œ์  -> ์ด๊ฑฐ UnitTest๋„ ์ฐ”๋” ๋“ค์–ด๊ฐ€ ์žˆ์Œ ใ…‹ใ…‹ํใ… ใ… ใ… ใ…  ํ•จ์ˆ˜ํ˜•.. ํ—ˆํ—ˆ ๋„ˆ๋ฌด ๋งŽ์•„์š”