IOS

ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์€ ์ •๋ฆฌํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด๋‘์–ด ์–ดํˆฌ๊ฐ€ ์กฐ๊ธˆ ๋”ฑ๋”ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.. ์ดํ•ด๋ถ€ํƒ๋“œ๋ ค์š” ๐Ÿฅฒ ์ด๋ฒˆ ๊ธ€์€ ์–ดํˆฌ๋„ ๋”ฑ๋”ฑํ•˜๊ณ  ์ค„๊ธ€ ํ˜•์‹์ด๋‹ค. ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฐœ๋…์ด๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ๋งž์„œ๋ณด์ž. ์š”์•ฝ ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ œ๋„ค๋ฆญ Placeholder์˜ ๋Š๋‚Œ์ด๋‹ค. Associated Type์€ ์›๋ž˜ typealias์˜€๋Š”๋ฐ, Swift 2.2๋ถ€ํ„ฐ Associated Type์ด๋ž€ ํ‚ค์›Œ๋“œ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. ์„ค๋ช… ์œ„์˜ ๋‘ ๊ฐ€์ง€ ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋‚ด์šฉ์€ ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ๋กœ ํ•จ๊ป˜ ์ดํ•ดํ•ด๋ณด๊ฒ ๋‹ค. ์šฐ์„  ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ž ๊น ์ดํ•ดํ•ด๋ณด๋ฉด, ํ”„๋กœ์ ํŠธ๋Š” ํ˜„์žฌ MVVM ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค. ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ViewModel์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋ณดํ†ต ๊ฐ ViewControlle..
ยท๐ŸŽ iOS & Swift
ํ•ด๋‹น ๊ธ€์— ์‚ฌ์šฉ๋œ ์˜ˆ์‹œ๋Š” 2๊ฐ€์ง€ ๊ธ€์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์ถœ์ฒ˜๋Š” ๊ธ€ ๋งˆ์ง€๋ง‰์— ์ ์–ด๋†“์•˜์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ํ•˜์…”์„œ ๊ธ€ ์ฝ์–ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :) ๐Ÿ’ฌ ๋“ค์–ด๊ฐ€๊ธฐ์ „์— ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๊ณ  ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. typealias๋Š” ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ฐ€๋…์„ฑ์žˆ๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ƒ๊ตฌ์š”? ์ •๋‹ต์€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์žˆ์ฃ . ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๊ทธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ํ•จ๊ป˜ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ—’ typealias๋ž€ typealias๋ž€ ํƒ€์ž…์— ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ๋ณ„์นญ, ์•ฝ์นญ์ž…๋‹ˆ๋‹ค. typealias (์‚ฌ์šฉํ•  ๋ณ„๋ช…) = (์กด์žฌํ•˜๋Š” ํƒ€์ž…) ex) typealias Nickname = Int ex) typealias Codable = Decodable & Encodable ex) ... typealias๋Š” ์ƒˆ..
ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค~ ์˜ค๋Š˜์€ Convenience initializer๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Designated initializer, Covenience initializer ์ฐจ๋ก€๋Œ€๋กœ ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €, ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ผ๊ณ  ํ•ด์„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ํด๋ž˜์Šค(๊ตฌ์กฐ์ฒด)๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ €์ด๊ณ , ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ณด์กฐ ์ด๋‹ˆ์…œ๋ผ์ด์ €์ž…๋‹ˆ๋‹ค. Designated init ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ผ๋ถ€๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์„œ Convenience init ์•ˆ์—์„œ Designated init ์„ ํ˜ธ์ถœํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Convenience i..
ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค :) ์š”์ฆ˜์—๋Š” ํ•œ ๋‹จ๊ณ„ ๋” ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์‹œ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถ€ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ์ด์ „์— ์•„๋ฌด ์ƒ๊ฐ์—†์ด ์ž‘์„ฑํ•˜๋˜ ์ฝ”๋“œ๋‚˜ ๊ฐœ๋…๋“ค์ด ๋ˆˆ์— ํ™• ๋„๋”๋ผ๊ตฌ์š”... ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ž‘ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ž‘์€ ์—ญ์‹œ ์—„์ฒญ๋‚œ ์ฐจ์ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํƒ„ํƒ„ํžˆ ํ•ฉ์‹œ๋‹ค... (๊ทผ๋ฐ ๊ธฐ์ดˆ๋งŒ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ํฅ๋ฏธ๊ฐ€ ๋–จ์–ด์ง€๋Š”๊ฑด ์‚ฌ์‹ค... ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ ์ ˆํžˆ ์š”๋ฆฌ์กฐ๋ฆฌ ์•„์‹œ์ฃ ...? ๐Ÿ˜‹) frame vs bounds ์˜ค๋Š˜์€ frame๊ณผ bounds์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ๊ฑฐ์˜ˆ์š”. ์•„ ๊ทผ๋ฐ, ์š”์•ฝ๋ฒ„์ „์ด๋‹ˆ๊นŒ ์ž์„ธํ•˜์ง€ ์•Š์•„๋„ ์ดํ•ดํ•ด์ฃผ์„ธ์š”... ๊ผผ๊ผผํ•œ ์„ค๋ช…๋ฒ„์ „์€ ๋‚˜์ค‘์—... ์šฐ์„  ๋‹ค ์ดํ•ดํ•˜๊ณ  ๋‚˜์„œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉด frame๊ณผ bounds์˜ ์ฐจ์ด๋Š” ๋‹ค์Œ 3๊ฐ€์ง€๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ขŒํ‘œ๊ณ„์— ๋Œ€ํ•œ ์ฐจ..
ยท๐ŸŽ iOS & Swift
์šฐ๋ฆฌ๋Š” ์˜ต์…”๋„์— ๋Œ€ํ•ด ๋ฌผ์—ˆ์„ ๋•Œ, ์–ผ๋งˆ๋‚˜ ์ž˜ ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ์„๊นŒ? Summary ์˜ต์…”๋„์€ ๋ณ€์ˆ˜์— ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ , ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ์ƒํƒœ(nil)๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Swift์— ๋„์ž…๋œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์˜ต์…”๋„์€ Enum ํ˜•ํƒœ๋กœ ์ •์˜๋˜์–ด ์žˆ๊ณ , ๊ฐ’์˜ ์žˆ๊ณ  ์—†์Œ์„ ๊ฐ Case๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…”๋„๋กœ ํ‘œํ˜„๋œ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Forced Unwrapping(๊ฐ•์ œ ์–ธ๋ž˜ํ•‘), Optional Binding(์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ), Nil-Coalescing Operator(Nil๋ณ‘ํ•ฉ์—ฐ์‚ฐ์ž)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ํ†ตํ•ด์„œ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ํ‘œํ˜„๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…”๋„(Optional) ๋„ˆ๋ž€ ๋…€์„ ์˜ต์…”๋„์˜ ์˜๋ฏธ ์ž ์šฐ๋ฆฌ๋Š” ๊ทผ๋ณธ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— Apple ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋„๋ก ํ•˜์ฃ . (..
ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”~ ์ด์ œ๋Š” ์ด๋Ÿฐ ์ž‘์€ ์ด์Šˆ๋“ค๋„ ์ž˜ ๊ธฐ๋กํ•ด๋†“์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ €์ฒ˜๋Ÿผ ์ด์Šˆ๋ฅผ ๊ฒช๊ณ  ์ฐพ์œผ๋ ค๊ณ  ํ• ํ…Œ๋‹ˆ๊นŒ์š”! ๋„์›€์ด ์กฐ๊ธˆ์ด๋ผ๋„ ๋˜๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ Info.plist๋ฅผ ์˜ฎ๊ธฐ๊ณ  ๋‚˜๋‹ˆ๊นŒ ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ์•ˆ๋˜์‹œ๋‚˜์š”? ๊ทธ๋Ÿผ ๊ฑฐ์˜ 90% ํ™•๋ฅ ๋กœ ์ด ์ด์Šˆ์ผ ๊ฒƒ ๊ฐ™์•„์š”. (์ข€ ๊ณผ์žฅ๋˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ...ใ…Žใ…Ž) ์ด์Šˆ ์ƒํ™ฉ ๋ณดํ†ต ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…ํ•  ๋•Œ, Info.plist์˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ฒผ์„ ๋•Œ ํ•ด๋‹น ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ Info.plist๋Š” ํ”„๋กœ์ ํŠธ ๋ฐ”๋กœ ๋ฐ‘์— ์œ„์น˜ํ•ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ํด๋”๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ฒผ์„ ๋•Œ ๊ทธ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ด์š”. Showing All Messages Build input file cannot be found: '/Users/taehy.k/Desktop/MVVMSamp..
ยท๐ŸŽ iOS & Swift
๐Ÿ’ฌ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—(Prepare) ์ƒ๊ฐ๋ณด๋‹ค ์šฐ๋ฆฌ๋Š” ํŽ˜์ด์ง• ๋˜๋Š” ํ™”๋ฉด์„ ์ž์ฃผ ๋งŒ๋‚ฉ๋‹ˆ๋‹ค. ์•ฑ์˜ ์˜จ๋ณด๋”ฉ ํ™”๋ฉด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด, ์บ๋Ÿฌ์…€ ๋ทฐ(Carousel View), ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” View Pager๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๋Š” ํƒญ ๊ฐ„ ์ „ํ™˜๋˜๋Š” ํ™”๋ฉด ๋“ฑ ์ •๋ง ๋งŽ์€๋ฐ์š”! (์‚ฌ์‹ค ์˜ˆ์‹œํ™”๋ฉด์„ ๋‹ค ์ฒจ๋ถ€ํ•˜๊ณ  ์‹ถ์ง€๋งŒ,,, ๊ท€์ฐฎ์€๊ฑด ์•ˆ๋น„๋ฐ€..ใ…Žใ…Ž,,, ๊ผญ ์ฒจ๋ถ€ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..) ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์—๋Š” ๊ทธ ์ข…๋ฅ˜๋งŒํผ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ด๋‹ค๊ฑฐ๋‚˜ ์Šคํฌ๋กค๋ทฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜ ์ œ๊ฐ€ ์†Œ๊ฐœํ•ด๋“œ๋ฆด ์ปฌ๋ ‰์…˜๋ทฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ๋„ค์š”. ํ•„์š”ํ•œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ์ฃ ? ์˜ค๋Š˜ ์ œ๊ฐ€ ์˜ˆ์‹œ๋กœ ์„ค๋ช…๋“œ๋ฆด ํ™”๋ฉด์€ ์•ฑ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ์˜จ๋ณด๋”ฉ ํ™”๋ฉด(Onboarding View)์ž…๋‹ˆ๋‹ค..
ยท๐ŸŽ iOS & Swift
๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ด์™ธ์—๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ๋ณ€ํ˜•์‹œ์ผœ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿด๋•Œ๋งˆ๋‹ค ์šฐ๋ฆฌ๋Š” ์กฐ๊ฑด๋ฌธ์„ ์ด์šฉํ•ด ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ์ œ๋ฒ• ๊ธธ๊ฒŒ ์ž‘์„ฑํ•ด์„œ ๋ฐฐ์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ณ ๋Š” ํ•˜๋Š”๋ฐ์š”. ์ € ์—ญ์‹œ๋„ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์— SOPT๋ผ๋Š” IT ๋ฒค์ฒ˜ ์ฐฝ์—… ๋™์•„๋ฆฌ์—์„œ APPJAM ์ด๋ผ๋Š” 3์ฃผ๊ฐ„์˜ ํฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ค‘์š”ํ•˜๊ฒŒ ๋Š๋‚€ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ž˜ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๋‚ด์šฉ์—์„œ๋Š” ์ •๋ง ์ผ๋ถ€๋ถ„๋งŒ ๋‹ค๋ฃฌ ๊ฒƒ์ธ๋ฐ์š”. ์ด ์—ญ์‹œ Apple Develeoper ๊ณต์‹ ๋ฌธ์„œ์— ์ •๋ง ์ž์„ธํ•˜๊ฒŒ ์ž˜ ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค. (์ง„์งœ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ๋Š๋ผ๋Š” ๊ฒƒ์€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ž˜ ์ฝ์ž ์ธ ๊ฒƒ ๊ฐ™๋„ค์š”..ใ…Žใ…Ž) ๋ญ ์—ฌํŠผ! ์˜ค๋Š˜์€ ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ..
taeeekki
'IOS' ํƒœ๊ทธ์˜ ๊ธ€ ๋ชฉ๋ก (11 Page)