๐Ÿ“’ Study

List (๋ฆฌ์ŠคํŠธ): ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์‹œํ€€์Šค ์ž๋ฃŒํ˜• ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง•์ˆœ์„œ๊ฐ€ ์กด์žฌ๊ฐ€๋ณ€ํ˜• ์ž๋ฃŒํ˜•๋Œ€๊ด„ํ˜ธ([])๋กœ ํ‘œ๊ธฐ์–ด๋–ค ์ž๋ฃŒํ˜•์ด๋ผ๋„ ์ €์žฅ ๊ฐ€๋Šฅ0 ๊ฐœ ์ด์ƒ์˜ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ์ €์žฅmy_list_1 = [1, 'a', 3, 'b', 5]my_list_2 = [1, 2, 3, 'Python', ['hello', 'world', '!!!']] > ๋น„์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑa = list()b = []   ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์‹ฑ( indexing )my_list = [1, 'a', 3, 'b', 5]print(my_list[0]) # 1print(my_list[1]) # aprint(my_list[2]) # 3print(my_list[3]) # bprint(my_list[4]) #..
UIScrollView์™€ UIPageControl์„ ์ด์šฉํ•œ ํŽ˜์ด์ง€ ์ „ํ™˜ UI์„ค์ • ViewController์— UIScrollView์™€ PageControl์„ ์˜ฌ๋ฆฐ ํ›„ ScrollView์˜ ๋ ˆ์ด์•„์›ƒ์„ Top, Bottom, Left, Right ๋ชจ๋‘ safeArea์™€ 0์œผ๋กœ ๋งž์ถฅ๋‹ˆ๋‹ค. ScrollView์™€ Page Control๋Š” ๋”ฐ๋กœ ์œ„์น˜ํ•˜๋„๋ก ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ViewController์™€ ์—ฐ๊ฒฐ @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var pageControl: UIPageControl! Page ์„ค์ • ์šฐ์„  page๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝํ•  ํŽ˜์ด์ง€๊ฐ€ ๋“ค์–ด๊ฐˆ UIView ๋ฐฐ์—ด ์„ ์–ธํ•ด์ค๋‹ˆ๋‹ค. var pages: [UIView] = [] ๊ทธ๋‹ค์Œ..
UIPageControl UIPageControl์€ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋‚˜ ์—ฌ๋Ÿฌ ์žฅ์˜ ์‚ฌ์ง„๋“ค์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ผ๋ จ์˜ ์ ๋“ค์ž…๋‹ˆ๋‹ค. pages ๊ด€๋ฆฌ var currentPage: Int : PageControl์—์„œ ํ‘œ์‹œ๋˜๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€ ( ํ˜„์žฌ ์œ„์น˜ ํ‘œ์‹œ ) ( 0์ด ํ˜„์žฌ ํŽ˜์ด์ง€ ) var numberOfPages: Int : ํŽ˜์ด์ง€ ์ˆ˜ ( ํ‘œ์‹œํ•  ์ ์˜ ๊ฐœ์ˆ˜) ( default : 0 ) var hidesForSinglePage: Bool : ํŽ˜์ด์ง€๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ, PageControl์˜ ์ˆจ๊น€ ์—ฌ๋ถ€ ๊ฒฐ์ • ( true : ์ˆจ๊น€, false : ์•ˆ์ˆจ๊น€ ( default ) ) Page Indicator ์˜ ์ƒ‰์ƒ ์ง€์ • var pageIndicatorTintColor: UIColor? : ์„ ํƒ๋˜์ง€ ์•Š์€ pageIndi..
์˜ค๋Š˜์€ Scroll View์˜ ๋ ˆ์ด์•„์›ƒ์„ ์žก๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ScrollView ScrollView๋Š” ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•œ Content์˜์—ญ ๋‚ด์—์„œ ์ž์‹ ์˜ Content๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ”Œ๋žซํผ์— ์ ํ•ฉํ•œ Scroll gesture๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ, ScrollView๋Š” ๊ธฐ๋ณธ content์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ๋ณด์ด๋Š”์ง€ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ScrollView๋Š” ์ˆ˜ํ‰, ์ˆ˜์ง ํ˜น์€ ๋‘ ๊ฐœ ๋‹ค ์Šคํฌ๋กคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์คŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. TableView์™€ CollectionView๋Š” ScrollView๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ScrollView ์ ์šฉ 1) ViewController์— ScrollView๋ฅผ ์˜ฌ๋ ค์„œ AutoLayout ์„ค์ •ํ•˜๊ธฐ Library ์ฐฝ์—..
HTTP ํ”„๋กœํ† ์ฝœ์ด๋ž€? HTTP ํ”„๋กœํ† ์ฝœ์ด๋ž€ "HyperText Transfer Protocol"์˜ ์ค„์ž„๋ง๋กœ ์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์•ฝ ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ•˜์ดํผ ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ ์‚ฌ์šฉ์ด ๋˜๋Š”๋ฐ์š”! ์ด๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ, ์„œ๋ฒ„๋Š” ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ผ์š”! ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ํ•˜๋Š” ์š”์ฒญ/์‘๋‹ต ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ์ด๋ฃจ์–ด์ ธ์š”. ๋˜ํ•œ HTTP๋Š” ์ด๋ฏธ์ง€, ์˜์ƒ, ์Œ์„ฑ, ํŒŒ์ผ JSON ๋“ฑ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTTP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„์—ฐ๊ฒฐ์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋น„์—ฐ๊ฒฐ์„ฑ์ด๋ผ๋Š” ๊ฒƒ์€ ์ „์— ๋ณด๋ƒˆ๋˜ ๋ฐ์ดํ„ฐ์™€ ํ›„์— ๋ณด๋ƒˆ๋˜ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์—ฐ๊ด€์„ฑ์ด ์ „ํ˜€ ์—†๋‹ค๋Š” ๊ฒƒ์ด์—์š”! ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ..
์˜ค๋Š˜์€ ARC ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด ๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด ๋ณผ๊นŒ์š”?! โœจ ์Šค์œ„ํ”„ํŠธ๋Š” ARC ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํž™ ์˜์—ญ์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์Œ.. ๊ทธ๋ ‡๋‹ค๋ฉด ํž™ ์˜์—ญ์ด ๋Œ€์ฒด ๋ญ๊ธธ๋ž˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ• ๊นŒ์š”?! ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ค‘ Heap ์˜์—ญ Heap ์˜์—ญ์€ ๋Ÿฐํƒ€์ž„ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋™์  ํ• ๋‹น์ด ๋ญ”๋ฐ์š”?! ๋™์  ํ• ๋‹น์ด๋ž€ ์Šคํƒ ์˜์—ญ์ฒ˜๋Ÿผ ์ •ํ•ด์ง„ ๊ณณ์— ๋ฐ์ดํ„ฐ ๋”ฑ๋”ฑ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋น„์›Œ์ ธ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์ฐพ์•„์„œ ํฌ๊ธฐ๋‚˜ ์ƒ์กด๊ธฐ๊ฐ„์„ ์ •ํ•˜์—ฌ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Heap ์˜์—ญ์—๋Š” ์ฐธ์กฐ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅ์ด ๋ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Heap ์˜์—ญ์— ์ €์žฅ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹น ์ฐธ..
์•ˆ๋…•ํ•˜์„ธ์š”! ์˜ค๋Š˜์€ split๊ณผ components์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. split์™€ components๋Š” ๋ฌธ์ž์—ด์„ ํŠน์ • ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋ฌธ๋ฒ•์ด์—์š”. ์šฐ์„  split์™€ components์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์ „์— ๊ฐ๊ฐ์˜ ์ •์˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์˜ ์—ญํ• ์„ ์‚ดํŽด๋ด…์‹œ๋‹ค. Split func split( separator: String, maxSplits: Int = .max, omittingEmptySubsequences: Bool = true ) -> [Substring] split๋Š” Swift Standard Library ์— ํฌํ•จ์ด ๋˜์–ด์žˆ์–ด์„œ, import ์—†์ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค! split๋Š” separator, maxSplits, omittingEmptySubseque..
์˜ค๋Š˜์€ ๊ณ ์ฐจํ•จ์ˆ˜ map๊ณผ compactMap, flatMap์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค! ๊ณ ์ฐจํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋ผ๋Š” ๋œป์ด๊ฒ ์ฃ ?!? ์šฐ์„  map์ด ์–ด๋–ค ํ•จ์ˆ˜์ธ์ง€์— ๋Œ€ํ•œ ์ดํ•ด๋ถ€ํ„ฐ ํ•ด๋ด…์‹œ๋‹ค! map map ์€ ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ์ œ๊ณฑํ•œ ๊ฐ’์„ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด, var array = [Int]() for i in 1...10 { array.append(i*i) } print(array) // ์ถœ๋ ฅ: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ๊ฒ ์ฃ ?! ์ด๋ฅผ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ๊ฐ€ ์ด map์ด..
EarthSea
'๐Ÿ“’ Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก