๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šค์œ„ํ”„ํŠธ20

[RxSwift] Observable Observable ์ด๋ž€?Observable์€ RxSwift์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋งํ•˜์ž๋ฉด, Observable์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐฉ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ’๋“ค์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์‘๋‹ต, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Observable์€ ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” next, error, completed์ž…๋‹ˆ๋‹ค.nextObservable์ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ๋ฐฉ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.Observable์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ next ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.error์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐฉ์ถœ๋˜๋ฉฐ, ์ดํ›„์—๋Š” ๋” ์ด์ƒ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.completedObservable์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์š”์†Œ์˜ ๋ฐฉ์ถœ์„ ์™„๋ฃŒ.. 2024. 6. 7.
[RxSwift] RxSwift๋ž€? iOS ๊ฐœ๋ฐœ์ž๋ผ๋ฉด RxSwift์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. RxSwift๋Š” Swift ์–ธ์–ด์— ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋„์ž…ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” RxSwift์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ณ , iOS ๊ฐœ๋ฐœ์—์„œ RxSwift๊ฐ€ ์–ด๋–ป๊ฒŒ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.RxSwift๋ž€?RxSwift๋Š” ๋น„๋™๊ธฐ์ ์ด๊ณ  ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ์ฝ”๋“œ๋ฅผ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์‹œํ€€์Šค์™€ ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. RxSwift๋Š” ReactiveX (Reactive Extensions) ํŒจ๋ฐ€๋ฆฌ์˜ ์ผ๋ถ€๋กœ, ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ธ๊ธฐ ์žˆ๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ๊ฐœ๋…ObservableRxSwift์˜ ํ•ต์‹ฌ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.Observable์€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ด.. 2024. 6. 3.
[Swift] ์ž๋™ ์ฐธ์กฐ ์นด์šดํŠธ ์ž๋™ ์ฐธ์กฐ ์นด์šดํŠธ(ARC, Automatic Reference Counting)์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋™์œผ๋กœ ์ฐธ์กฐ ํšŸ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†๊ณ  ARC๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ง€ํŠน์ • ๊ฒฝ์šฐ์— ARC์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ์˜ ํŠน์ • ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ•„์š”๋กœ ํ•จ์ฐธ์กฐ ํšŸ์ˆ˜๋Š” ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์—๋งŒ ์ ์šฉ๋˜๊ณ  ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋“ฑ ๊ฐ’ ํƒ€์ž…์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Œ ARC ๋™์ž‘์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋งˆ๋‹ค ARC๋Š” ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋ฐ ํ•„์š”ํ•œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฉ”๋ชจ๋ฆฌ๋Š” ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๊ด€๋ จ๋œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์Œ์ธ์Šคํ„ด์Šค๊ฐ€ ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ ARC๋Š” ๊ทธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ง€ํ•ด ๊ณต๊ฐ„์„ ํ™•๋ณดAR.. 2024. 4. 2.
[Swift] ์ œ๋„ค๋ฆญ ์ œ๋„ค๋ฆญ(Generics)์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์™€ ํƒ€์ž…์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ์ธ์ž๊ฐ’์˜ ํƒ€์ž…๋งŒ ๋‹ค๋ฅด๊ณ  ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜(Generic Functions)ํ•จ์ˆ˜๋ช… ๋’ค์— ํƒ€์ž… ์ด๋ฆ„ placeholder์ธ T๋ฅผ ์„ ์–ธํ•˜๊ณ  a,b ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ T๋กœ ์„ ์–ธfunc swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}var someInt = 3var anotherInt = 107swapTwoValues(&someInt, &anotherInt)// someInt is now 107, and anotherInt is now 3var someString .. 2024. 4. 2.
[Swift] ํ”„๋กœํ† ์ฝœ ํ”„๋กœํ† ์ฝœ(Protocols)์–ด๋–ค ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ ์–ธํ•ด๋‘๋Š” ๊ฒƒํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์— ์˜ํ•ด ์ฑ„ํƒํ”„๋กœํ† ์ฝœ ๋ฌธ๋ฒ•protocol SomeProtocol {// protocol definition}ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ€์ž… ์ด๋ฆ„ ๋’ค์— ์ฝœ๋ก (:)์„ ๋ถ™์ด๊ณ  ํ”„๋กœํ† ์ฝœ ์ด๋ฆ„์„ ์ ์Œํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•  ๋•Œ๋Š” ํ”„๋กœํ† ์ฝœ์— ์ •์˜๋œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ ํ•ด์•ผ๋งŒ ํ•จ struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here}class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol { // class definition goes her.. 2024. 3. 29.
[Swift] ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์—๋Ÿฌ์˜ ํ‘œ์‹œ์™€ ๋ฐœ์ƒenum VendingMachineError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock}throw VendingMachineError.insufficientFunds(coinsNeeded: 5) ์—๋Ÿฌ ์ฒ˜๋ฆฌ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ํ•จ์ˆ˜์—์„œ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์—์„œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•do-catch ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ต์…”๋„ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•assert๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ•์ œ๋กœ ํฌ๋ž˜์‰ฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ์–ด๋–ค ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ํ˜น์€ ์ƒ์„ฑ์ž๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด throw ํ‚ค์›Œ๋“œ๋ฅผ ํ•จ์ˆ˜ ์„ ์–ธ.. 2024. 3. 28.
๋ฐ˜์‘ํ˜•