๋ชฉ๋กiOS [Swift]/๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํžˆ! (32)

Focus On Develop ๐ŸคŸ๐ŸคŸ

[Swift] Class vs Struct

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋งค์šฐ ๊ธฐ๋ณธ์ด๋ฉด์„œ๋„, ๋งค์šฐ ์ค‘์š”ํ•œ Class์™€ Struct์— ๋Œ€ํ•ด์„œ ์ข€ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•ด์š”! ๋Œ์•„๋ณด๋‹ค ๋ณด๋‹ˆ, ์ด๋Ÿฐ Swift์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ด์ง€๋งŒ ๋งค์šฐ ์ค‘์š”ํ•œ ๋‚ด์šฉ๋“ค์„ ๋”ฐ๋กœ ๋‹ค๋ฃจ์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™์•„์„œ ์ข€ ๋‹ค๋ฃจ๋ ค๊ณ ์š”!! ๐Ÿง‘‍๐Ÿ’ป ๋จผ์ € Struct์™€ Class๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๋งŒ๋“  "๋ฐ์ดํ„ฐ ํƒ€์ž…"์ด์—์š”. ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ์šฉ๋„์— ๋งž๊ฒŒ ๋ฌถ์–ด ํ‘œํ˜„ํ•˜๊ณ ์ž ํ• ๋•Œ, ๋‚ด๋ถ€์—์„œ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•ด์„œ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋  ์ˆ˜ ์žˆ์–ด์š”. ๋จผ์ € ๊ฐ„๋žตํ•˜๊ฒŒ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์„ ์š”์•ฝํ•ด๋ณด๊ณ , ์ค‘์š”ํ•œ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ๋Š” ์ข€ ๋” ์‚ดํŽด๋ณผ๊ฒŒ์š”! ๊ณตํ†ต์  ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํผํ‹ฐ ์ •์˜ ๊ฐ€๋Šฅ ๊ธฐ๋Šฅ ์‹คํ–‰์„ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ ์ •์˜ ๊ฐ€๋Šฅ initializer(์ƒ์„ฑ์ž) ์ •์˜ ๊ฐ€๋Šฅ extension ์„ ํ†ตํ•œ ํ™•์žฅ ๊ฐ€๋Šฅ protocol ์ฑ„ํƒ ๊ฐ€๋Šฅ..

[Swift] Singleton Pattern (์‹ฑ๊ธ€ํ†ค ํŒจํ„ด)

์˜ค๋žœ๋งŒ์— ํฌ์ŠคํŒ…์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”, ์ด๋Ÿฐ ์ €๋Ÿฐ ์‹ ๊ฒฝ์“ธ ์ผ๋“ค์ด ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™์•„์š” ๐Ÿ˜‚ ๋ฐ”๋น ๋„ ํ•˜๋ฃจ์— ๊ฐ„๋‹จํ•œ ํฌ์ŠคํŒ…์ด๋ผ๋„ ํ•˜๋‚˜๋Š” ํ•˜์ž๊ณ  ๋ชฉํ‘œ๋ฅผ ์„ธ์› ๋Š”๋ฐ, ์‰ฝ์ง€ ์•Š๋”๊ตฐ์š” ๐Ÿ˜ญ ๊ฑฐ๋‘์ ˆ๋ฏธํ•˜๊ณ  ์˜ค๋Š˜์€ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ๊ฒŒ์š”!! Design Pattern ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ Design Pattern ์ค‘ ์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋””์ž์ธ ํŒจํ„ด์ด์—์š”. ๊ทธ๋Ÿผ.. Design Pattern์€ ๋ญ˜๊นŒ์š”? ๊ฐœ๋ฐœ์—์„œ ๋””์ž์ธํŒจํ„ด์ด๋ž€, ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋น„์Šทํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๋Š” ์ •ํ˜•ํ™”(?)๋œ ํ…œํ”Œ๋ฆฟ์ด๋‚˜ ๊ฐœ๋ฐœํŒจํ„ด ๊ฐ™์€, ๋งˆ์น˜ "ํ•ด๊ฒฐ์ฑ…" ๊ฐ™์€๊ฑฐ์—์š”. ์ด๋Ÿฐ ์–ด๋–ค ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด, ๊ทธ๋งŒํผ "์ •ํ˜•ํ™”"๋œ ํ•ด๊ฒฐ์ฑ… ๊ฐ™์€ ๋งฅ๋ฝ์ด๋‹ˆ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ, ํšจ์œจ์„ฑ, ๋””๋ฒ„๊น…, ํ˜‘์—… ๋“ฑ์ด ์‰ฌ์›Œ์ง€๊ฒ ์ฃ ? Swift์—์„œ ๊ฐ€์žฅ ๋ณดํŽธ์ ์œผ๋กœ ..

[Swift] FileManager

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” swift์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” FileManager๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ, ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์‚ญ์ œํ•˜๋Š” ๊ฑธ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”. ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ์ปฌ์— ์ด๋ฏธ์ง€, ์Œ์›, ํ…์ŠคํŠธ ๋“ฑ ํŒŒ์ผ์„ ์ €์žฅํ–ˆ๋‹ค ๋ถˆ๋Ÿฌ์™”๋‹ค ํ• ๋•Œ๋Š” FileManager๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์— ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ , ํŒŒ์ผ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ CoreData ๋“ฑ์„ ํ†ตํ•ด์„œ ๊ด€๋ฆฌํ•˜์ฃ . ์ด ์ค‘์— ๋กœ์ปฌ์— ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”! ๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ป˜์š”! File Domain ๋จผ์ € macOS, iOS ๋“ฑ apple์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ domain์œผ๋กœ ํŒŒ์ผ๋“ค์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ด์š”. ์ด domain์€ ๊ธฐ๋ณธ์ ์œผ๋กœ user, local, network, system 4๊ฐœ์˜ domain์„ ์ œ๊ณตํ•ด์š”. ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ์š”! ์˜ˆ๋ฅผ ๋“ค๋ฉด, ํ„ฐ๋ฏธ๋„์„ ์—ด๋ฉด ์ตœ์ƒ..

[Swift] Audio Recording

์˜ค๋Š˜์€ Swift์—์„œ AVAudioRecorder ๋ฅผ ํ™œ์šฉํ•œ ๋…น์Œ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”! ๋จผ์ € ๋…น์Œ๋œ ํŒŒ์ผ์„ ๋กœ์ปฌ ๊ฒฝ๋กœ์— ์ €์žฅํ•˜๊ณ , ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ณผ์ •์ด ์žˆ์œผ๋‹ˆ FileManager๋ฅผ ๋จผ์ € ๋ณด์‹œ๊ธธ ์ถ”์ฒœ๋“œ๋ ค์š” ๐Ÿ˜Ž ๋จผ์ € Swift์—์„œ ๋ฏธ๋””์–ด(์˜์ƒ, ์˜ค๋””์˜ค ๋“ฑ)์„ ๋‹ค๋ฃฐ๋•Œ๋Š” AVFoundation๋ฅผ ํ™œ์šฉํ•ด์„œ ๋Œ€๋ถ€๋ถ„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋””์˜ค์™€ ๊ด€๋ จ๋œ ์‚ฌํ•ญ์€ AVAudioRecord, AVAudioPlayer, AVAudioSession, AVAudioEngine ๋“ฑ๋“ฑ ๋งŽ์€ ํด๋ž˜์Šค๋กœ ์ง€์›์„ ํ•ด์ค˜์š”. AVFoundation์„ importํ•˜๊ณ  ์‹œ์ž‘ํ•ด์ฃผ์„ธ์š”~! ๋จผ์ € ๋…น์Œ์„ ์œ„ํ•ด์„œ ์˜ค๋””์˜ค ์„ธ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘‰ AVAudioSession ์˜ค๋””์˜ค ์„ธ์…˜์„ ํ†ตํ•ด ๋…น์Œ/์žฌ์ƒ ๋“ฑ์— ๋Œ€ํ•œ ๊ถŒํ•œ, ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋…น์Œ์ธ์ง€, ์–ด๋–ค ๋งˆ์ดํฌ๋ฅผ ์‚ฌ..

[Swift] typealias

typealias๋Š”.. ์–ด๋””์„œ ๋งŽ์ด ๋ณธ ๋“ฏ ํ•˜๊ณ , ์‹ค์ œ๋กœ ์†Œ์Šค๋ฅผ ๋ณด๋ฉด ์—ฌ๊ธฐ ์ €๊ธฐ ๋˜๊ฒŒ ๋งŽ๋”๋ผ๊ณ ์š”! ๊ทธ๋ƒฅ ๋Š๋‚Œ์ ์œผ๋กœ ์•„~ ์ด๊ฒŒ ํƒ€์ž…์„ ์žฌ์ •์˜ํ•˜๋Š”๊ฑฐ๊ตฌ๋‚˜~ ํ•˜๊ณ  ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ”์—ˆ๋Š”๋ฐ์š”! ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ ์ •๋ฆฌ๋ฅผ ํ•ด๋†“์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ’ typealias ๊ธฐ์กด์— ์ •์˜๋˜์–ด์žˆ๋Š” ์–ด๋–ค ํƒ€์ž…์„ ์žฌ์ •์˜ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ , ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค! ใ…‹ใ…‹ ์˜ˆ๋ฅผ๋“ค๋ฉด ์นœ๊ตฌ ๋ถ€๋ฅผ๋•Œ, ๋ณ„๋ช…์„ ์ง€์–ด์ฃผ๊ณ  ํŽธํ•˜๊ฒŒ ๋ณ„๋ช…๋ถ€๋ฅด๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์•„์š” ๐Ÿ˜‚๐Ÿ˜‚ ์ด๋ฆ„๊ณผ ๋ณ„๋ช…์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์•„์š”! typealias ๋ณ„๋ช… = ์›๋ž˜์ด๋ฆ„ ๋ฐ”๋กœ ๋ช‡๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ ์‚ดํŽด๋ณผ๊ฒŒ์š”! typealias Name = String var name: Name var nickName: String String์ด๋ผ๋Š” ํƒ€..

[Swift] Codable

์šฐ๋ฆฌ๊ฐ€ ๋„คํŠธ์›ํ†ต์‹  ๋“ฑ์„ ํ†ตํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์ฃ ! ์–ด๋–ค ์›น์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฐ›์„์ˆ˜๋„ ์žˆ๊ณ , ์–ด๋–ค ์›น์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„์— ์ „์†กํ•˜๊ธฐ๋„ ํ•˜์ฃ , ๊ฐ€์žฅ ๋ณดํŽธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํฌ๋งท์ด ๋ฐ”๋กœ json ํฌ๋งท์ด์—์š”! { "name": "Nury", "age": 10, "birthDate": "2021-02-26T12:15:17+0000" } ์ด๋ ‡๊ฒŒ ์ƒ๊ธด ๋…€์„๋“ค ๋งŽ์ด ๋ณด์…จ์ฃ ~~? jsonํฌ๋งท์€ ์ด๋ ‡๊ฒŒ [key : value] ๋กœ ๋ฌถ์ธ ๋งˆ์น˜ Dictionary ํ˜•ํƒœ์˜ ํฌ๋งท์ด์—์š” ใ…Žใ…Ž Swift์—์„œ๋Š” Codable์ด๋ผ๋Š” ๋…€์„์„ ํ†ตํ•ด json์„ ์•ฑ์˜ Object๋กœ, ์•ฑ์˜ Object๋ฅผ json์œผ๋กœ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”! ๊ทธ๋Ÿผ~~ Codable์ด๋ผ๋Š”๊ฒŒ ๋ญ๋ƒ๋ฉด~~~ ์ž์‹ ์„ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ํ‘œํ˜„(json๊ฐ™..

[Swift] CodingKey

๋‹ค๋“ค Codable์€ ๋งŽ์ด ์‚ฌ์šฉํ•˜์‹œ์ฃ ~~~?? Codable์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๐Ÿ‘‰ ์—ฌ๊ธฐ์— ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜๋ฉด ๋„คํŠธ์› ํ†ต์‹  ๋“ฑ์„ ํ†ตํ•ด ์™ธ๋ถ€์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ๋ฐ์ดํ„ฐ ํฌ๋งท์ด json์ด์ฃ !! ์ด jsonํŒŒ์ผ์„ ์•ฑ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋„๋ก Object๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ Decoding, ์•ฑ์˜ Object๋ฅผ jsonํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ Encoding ์ด๋ผ๊ณ  ํ–ˆ์—ˆ์ฃ ! ๊ทธ๋ฆฌ๊ณ  Encoding, Decoding ํ”„๋กœํ† ์ฝœ์„ ๋‘˜ ๋‹ค ํฌํ•จํ•˜๋Š”๊ฒŒ Codable ํ”„๋กœํ† ์ฝœ์ด์—ˆ์Šต๋‹ˆ๋‹ค ๐ŸคŸ Codable ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด Encoding, Decoding์€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ›Œ ํ›Œ ์ง€๋‚˜๊ฐ‘๋‹ˆ๋‹ค!! ์—ฌ๊ธฐ ๊ผญ ๋ณด๊ณ ์˜ค์„ธ์š”๐Ÿ‘ Codable์€ Swift์—์„œ ๊ต‰์žฅํžˆ ๊ฐ•๋ ฅํ•œ! ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๋งž์Šต๋‹ˆ๋‹ค๋งŒ,,,, ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์™ธ๋ถ€์˜..