iOS/Swift

Hash๋ž€? ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ, ์œ ์ง€ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด key๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๊ทธ key์— ๋”ฐ๋ผ value๋ฅผ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๋œปํ•œ๋‹ค. HashTable์ด๋ž€ Key๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ Index๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค. "์ œ๋ฆฌ"์˜ ์˜์–ด ์ด๋ฆ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด 1. "์ œ๋ฆฌ"๋ผ๋Š” key๋ฅผ hash ํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ๋‹ค 2. hash ํ•จ์ˆ˜ ๋‚ด์— hashํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฐพ์„ value์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š”๋‹ค. 3. ์ฐพ์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด value๊ฐ’ "jarry"๋ฅผ ์–ป๋Š”๋‹ค. Hashable์ด๋ž€? https://developer.apple.com/documentation/swift/hashable Hashable | Apple Developer Documentation A type that can be h..
์ดˆ๊ธฐํ™” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š” ๊ฒƒ. ๋ชจ๋“  ์ €์žฅ ์†์„ฑ๋“ค์€ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด์•ผ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ (์ดˆ๊ธฐ๊ฐ’์ด ์ง€์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•จ) ํด๋ž˜์Šค ๊ตฌ์กฐ์ฒด ์ง์ ‘ ์ดˆ๊ธฐ๊ฐ’ ๋„ฃ๊ธฐ O O ์ƒ์„ฑ์ž ์‚ฌ์šฉ O O ๋ฉค๋ฒ„์™€์ด์ฆˆ ์ด๋‹ˆ์…œ๋ผ์ด์ € X O Convenience init ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ณด์กฐ ์ด๋‹ˆ์…œ๋ผ์ด์ € ์ž๊ธฐ ๋‹จ๊ณ„์— ์žˆ๋Š” ์ง€์ • ์ƒ์„ฑ์ž ๋˜๋Š” ์ž๊ธฐ ๋‹จ๊ณ„์— ์žˆ๋Š” ๋‹ค๋ฅธ ํŽธ์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ๊ฐ€๋Šฅ ์ง€์ • ์ƒ์„ฑ์ž๋Š” ์ƒ์œ„ ์ง€์ • ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•จ ํด๋ž˜์Šค์—๋งŒ ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ (์ƒ์†๊ณผ ๊ด€๋ จ) ์ง€์ •์ƒ์„ฑ์ž๋ณด๋‹ค ์ ์€ ๊ฐฏ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ธŒ(Sub)๊ฐœ๋…์˜ ์ƒ์„ฑ์ž ํŽธ์˜ ์ƒ์„ฑ์ž๋Š” ์ง€์ • ์ƒ์„ฑ์ž์— ์˜์กด ๋ฐ ํ˜ธ์ถœ(์ง€์ •์ƒ์„ฑ์ž๊ฐ€ ์ €์žฅ ์†์„ฑ ์ดˆ๊ธฐํ™”) ์ดˆ๊ธฐํ™” ๊ณผ์ •์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ ์‹ค์งˆ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ..
๊ธฐ์ดˆ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋‹ค์ง€๋ฉด์„œ ํƒ€์ž… ์ฃผ์„๊ณผ ํƒ€์ž… ์ถ”๋ก ์˜ ๊ฐœ๋…์„ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํƒ€์ž… ์ถ”๋ก ์€ ๊ธฐ์กด์— ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ํƒ€์ž… ์ฃผ์„์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์ด๋ฒˆ์— ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์œผ๋‚˜ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐœ๋…์ด๊ธด ํ–ˆ๋‹ค. ๋‘ ๊ฐœ๋…์€ ๋ชจ๋‘ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์ด๋‹ค. 1. ํƒ€์ž… ์ฃผ์„(Type Annotation) var name: String var name: String = "Lily" ํƒ€์ž… ์ฃผ์„์€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•๊นŒ์ง€ ํ•จ๊ป˜ ๋ช…์‹œํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฒซ๋ฒˆ์งธ ์ค„ ์ฒ˜๋Ÿผ name์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด์„œ String์ด๋ผ๋Š” ์ž๋ฃŒํ˜•๊นŒ์ง€ ํ•จ๊ป˜ ์ง€์ •ํ•ด์ค€๋‹ค. ๋‘๋ฒˆ์งธ ์ค„ ์ฒ˜๋Ÿผ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๊ฐ’์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. 2. ํƒ€์ž… ์ถ”๋ก (Type Inference) var name = "Lily" ํƒ€์ž… ์ฃผ์„๊ณผ ๋‹ฌ๋ฆฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ• ..
๋‹ค์ด์–ด๋ฆฌ ์•ฑ์„ ๋งŒ๋“ค๋ฉด์„œ ๊ธฐ์กด์— ํŒŒ์ด์–ด ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์ €์žฅํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ œ์™ธ์‹œํ‚ค๋ฉด์„œ ๊ตณ์ด..? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ์–ด์ฐจํ”ผ ๋กœ๊ทธ์ธ์ด ํ•„์š” ์—†์œผ๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์•ฑ ๋‚ด์— ์ €์žฅํ•ด๋„ ๋˜๊ฒ ๋‹ค! ์‹ถ์–ด์„œ ์ „์— ๋ดค์—ˆ๋˜ CoreData๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค! (์˜คํžˆ๋ ค ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋ฅผ ์“ฐ๋ฉด ์ธํ„ฐ๋„ท๋„ ๋˜์•ผํ•˜๋‹ˆ๊นŒ ๋” ๋ถˆํŽธํ•  ๊ฒƒ ๊ฐ™๋‹ค..~!) CoreData๋Š” UserDefaults๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ „์— ๋‚ด๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ์ ์ด ์žˆ๋Š” UserDefaults๋Š” ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ(?)๋ฅผ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ณ , CoreData๋Š” ๊ทธ๋ณด๋‹ค ๋” ํฐ ๊ทœ๋ชจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค๊ณ  ํ•œ๋‹ค! ์Œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ์˜ˆ๋ฅผ๋“ค์ž๋ฉด ๋กœ๊ทธ์ธ์„ ํ–ˆ๋Š”์ง€ ์•ˆํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€.. ์™€๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ •๋ณด๋Š” UserDefaults, ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ์ค‘์ธ ..
๋‹ค์ด์–ด๋ฆฌ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ํ‰์†Œ ํ† ์ดํ”„๋กœ์ ํŠธ๋ฅด ํ•  ๋•Œ๋Š” ํฌ๊ฒŒ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋๋˜ ํ™”๋ฉด์ „ํ™˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉ์ž์˜ ํŽธ์˜๋ฅผ ์ค‘์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋‹ˆ ํŽธ๋ฆฌํ•จ์„ ์œ„ํ•ด present๋ฐฉ์‹์œผ๋กœ ํ™”๋ฉด์„ ๋„์šฐ๋˜ ๋ฐฉ์‹์„ push ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ฒผ๋‹ค. present์™€ push ๋ฐฉ์‹์€ ๊ฒฐ๊ณผ๋ฌผ๋งŒ ๋ณด์ž๋ฉด ํฌ๊ฒŒ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ ๋‚ด๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ๋Š๋‚€ ์ฐจ์ด์ ์—์„œ๋Š” 1. ์™ผ์ชฝ์œผ๋กœ ์Šค์™€์ดํ”„ํ•˜์—ฌ ๋ทฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹ 2. ์ƒˆ๋กœ์šด ๋ทฐ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐฉ์‹ (๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ๋ทฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด push๋กœ ํ•ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.) ๋” ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ ํฌ๊ฒŒ๋Š” ์ด์ •๋„..? ์ด๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ํฐ ์ฐจ์ด์ธ๊ฐ€ ํ•˜๋Š”๋ฐ ์‚ฌ์†Œํ•œ ๋ฐฉ์‹์—์„œ ๋ญ”๊ฐ€ ์•ฑ์ด ํ—ˆ์ˆ ํ•ด๋ณด์ด๋Š”..? ๋Š๋‚Œ์ด ๋“œ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‚ด๊ฐ€ ํŽธํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์ธ..
7์›” 19์ผ ์ง„ํ–‰ํ•œ RX์„ธ๋ฏธ๋‚˜ ๋ฐœํ‘œ ์ž๋ฃŒ
์ •๋ง ๋งŽ์€ ์•ฑ์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” TableView... ์ „์— ์‹œ๊ณ„์•ฑ์„ ํด๋ก ์ฝ”๋”ฉํ•  ๋•Œ ์–ด๋Š์ •๋„ ๊ณต๋ถ€ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์•ˆ์“ฐ๋‹ค๋ณด๋‹ˆ ๋‚ด ๊ธฐ์–ต์†์—์„œ ์‚ฌ๋ผ์ ธ๋ฒ„๋ ธ๋‹ค..ใ…Žใ…Ž๐Ÿคฃ ๊ทธ๋ž˜์„œ ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•ด... ์ด๋ฒˆ์— ์ œ๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค! ๋จผ์ € TableView๋Š” Table View, Table View Controller 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๋‘์‚ฌ์ง„์ด ๋˜‘๊ฐ™์€ ๊ตฌ์„ฑ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ.. ์ขŒ์ธก์€ ViewController์— Table View์™€ Table View Cell์„ ๋„ฃ์€ ๊ฒƒ์ด๊ณ  ์šฐ์ธก์€ ๊ทธ๋ƒฅ Table View Controller์ด๋‹ค. ๋‚ด๊ฐ€ ์ฑ…์—์„œ ๋ดค๋˜ ์˜ˆ์ œ์—์„œ๋Š” ์šฐ์ธก Table View Controller๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ ์ฐพ์•„๋ณด๋‹ˆ ์ขŒ์ธก์ฒ˜๋Ÿผ ViewController์— TableView์™€ TableViewCell์„ ๋„ฃ๋Š” ๊ฒƒ์„ ..
textField์— ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ... ํ‚ค๋ณด๋“œ๊ฐ€ ์˜ฌ๋ผ์™€ ์žˆ๋Š” ํ™”๋ฉด์—์„œ ํ‚ค๋ณด๋“œ๋ฅผ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•˜๊ณ ์‹ถ์„ ๋•Œ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ์šฉ.. 1. ๋นˆํ™”๋ฉด์„ ๋ˆŒ๋ €์„ ๋•Œ ๋จผ์ € ! ๋นˆํ™”๋ฉด์„ ๋ˆŒ๋ €์„ ๋•Œ ํ‚ค๋ณด๋“œ๋‚˜ datePicker๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ! override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) } 2. return ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋จผ์ €, UITextFieldDelegate ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! class myViewController: UITextFieldDelegate { } ๋‹ค์Œ์œผ๋กœ ์ด ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค override func viewDidLoad..
๋ฆด๋ฆฌ๐Ÿฐ
'iOS/Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก