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

์ „์ฒด ๊ธ€384

[Swift] ์ œ๋„ค๋ฆญ (Generic) ์ œ๋„ค๋ฆญ (Generic) ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐํ™” ํ•˜์—ฌ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์ด ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ ์ œ๋„ค๋ฆญ์„ ์ด์šฉํ•˜๋ฉด ํƒ€์ž…์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ ์ œ๋„ค๋ฆญ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ๊ณผ ํƒ€์ž…์€ ์žฌ์‚ฌ์šฉ์— ์šฉ์ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด์„œ ๊น”๋”ํ•œ ํ‘œํ˜„์ด ๊ฐ€๋Šฅ Swift์—์„œ์˜ ๋Œ€ํ‘œ์ ์ธ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ๋Š” Array์™€ Dictionary ํƒ€์ž…์ด Array์™€ Dictionary๋Š” Int ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๊ณ , String ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ, ํƒ€์ž…์— ์ œํ•œ์ด ์—†์Œ // String ํƒ€์ž…์„ ๊ฐ–๋Š” ๋‘๊ฐœ์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜ func swapTwoStrings(_ a: inout String, _ b: inout String) { let temporaryA = a a = b b = temporaryA } // Double.. 2023. 2. 7.
[Swift] ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์—๋Ÿฌ ์ฒ˜๋ฆฌ (ErrorHandling) ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๋Œ€์‘ํ•˜๊ณ , ์ด๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๊ณผ์ • Swift์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์—๋Ÿฌ์˜ ๋ฐœ์ƒ(throw ing), ๊ฐ์ง€(catching), ์ „ํŒŒ(propagating), ์กฐ์ž‘(manipulating)์„ ์ง€์›ํ•˜๋Š” ์ผ๊ธ‰ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณต ์—๋Ÿฌ์˜ ํ‘œ์‹œ์™€ ๋ฐœ์ƒ (Representing and Throwing Errors) Swift์—์„œ ์—๋Ÿฌ๋Š” Error ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ํ‘œํ˜„ Error ํ”„๋กœํ† ์ฝœ์€ ๋น„์–ด์žˆ์œผ๋ฉฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์— ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„ enum ServerError: Error { case forbidden case notFound case internalError case unauthori.. 2023. 2. 7.
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1] ์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜? ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๋ชจ์Œ ์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜? ๋ฌธ์ œ ์„ค๋ช… ๊ธธ์ด๊ฐ€ n์ด๊ณ , "์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜๋ฐ•์ˆ˜...."์™€ ๊ฐ™์€ ํŒจํ„ด์„ ์œ ์ง€ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด n์ด 4์ด๋ฉด "์ˆ˜๋ฐ•์ˆ˜๋ฐ•"์„ ๋ฆฌํ„ดํ•˜๊ณ  3์ด๋ผ๋ฉด "์ˆ˜๋ฐ•์ˆ˜"๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ œํ•œ ์‚ฌํ•ญ n์€ ๊ธธ์ด 10,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ž…์ถœ๋ ฅ ์˜ˆ n return 3 "์ˆ˜๋ฐ•์ˆ˜" 4 "์ˆ˜๋ฐ•์ˆ˜๋ฐ•" ์ œ์ถœ func solution(_ n:Int) -> String { var re = "" for i in 1...n{ if i % 2 == 1{ re += "์ˆ˜" } else{ re += "๋ฐ•" } } return re } 1๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜์—ฌ, ํ™€์ˆ˜๋ผ๋ฉด "์ˆ˜" ์ง์ˆ˜๋ผ๋ฉด "๋ฐ•"์„ re ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•œ๋‹ค. ๋‹ค๋ฅธ ํ’€์ด func.. 2023. 2. 7.
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1] ์†Œ์ˆ˜ ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๋ชจ์Œ ์†Œ์ˆ˜ ์ฐพ๊ธฐ ๋ฌธ์ œ ์„ค๋ช… 1๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž n ์‚ฌ์ด์— ์žˆ๋Š” ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. ์†Œ์ˆ˜๋Š” 1๊ณผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ๋งŒ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.) ์ œํ•œ ์‚ฌํ•ญ n์€ 2 ์ด์ƒ 1000000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ž…์ถœ๋ ฅ ์˜ˆ n result 10 4 5 3 ์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช… ์ž…์ถœ๋ ฅ ์˜ˆ #1 1๋ถ€ํ„ฐ 10 ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋Š” [2,3,5,7] 4๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ 4๋ฅผ ๋ฐ˜ํ™˜ ์ž…์ถœ๋ ฅ ์˜ˆ #2 1๋ถ€ํ„ฐ 5 ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋Š” [2,3,5] 3๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ 3์„ ๋ฐ˜ํ™˜ ์ œ์ถœ import Foundation func solution(_ n:Int) -> Int { var isPrime = true var count = 0 for i in 2...n { .. 2023. 2. 7.
[Swift] ๊ณ ์ฐจํ•จ์ˆ˜ ๊ณ ์ฐจํ•จ์ˆ˜ ๊ณ ์ฐจํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๊ฑฐ๋‚˜ ํ•จ์ˆ˜์‹คํ–‰์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•จ์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ swift์˜ ํ•จ์ˆ˜(ํด๋กœ์ €)๋Š” ์ผ๊ธ‰์‹œ๋ฏผ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜์˜ ๊ฒฐ๊ด๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ ์ผ๊ธ‰๊ฐ์ฒด (First Class Citizen) ๊ฐ์ฒด๊ฐ€ ๋Ÿฐํƒ€์ž„์—๋„ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ์ฒด๋ฅผ ์ธ์ž ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. map ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์ •์˜ํ•œ ํด๋กœ์ €๋กœ ๋งคํ•‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ˜ํ™˜ //For๋ฌธ ์‚ฌ์šฉ let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9] var multiplyArray = [Int]() for num in numArray{ multiplyA.. 2023. 2. 6.
[Swift] ํด๋กœ์ € (Closure) ํด๋กœ์ € (Closure) ์‚ฌ์šฉ์ž์˜ ์ฝ”๋“œ ์•ˆ์—์„œ ์ „๋‹ฌ๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์ง์„ ๊ฐ€์ง„ ์ค‘๊ด„ํ˜ธ"{}" ๊ตฌ๋ถ„๋œ ์ฝ”๋“œ์˜ ๋ธ”๋ก ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜ ํด๋กœ์ €๋Š” ์–ด๋– ํ•œ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ์บก์ฒ˜(capture)ํ•ด์„œ ์ €์žฅ ๊ฐ€๋Šฅ Swift๋Š” ์ด ์บก์ฒ˜์™€ ๊ด€๋ จํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ์ฒ˜๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜ํ™˜ ๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ํ•จ์ˆ˜์™€ ๋™์ผ Swift ํด๋กœ์ €๋Š” ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๊น”๋”ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์Šคํƒ€์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ ๋ฌธ๋งฅ(context)์—์„œ ์ธ์ž ํƒ€์ž…๊ณผ ๋ฐ˜ํ™˜ ํƒ€์ž…์˜ ์ถ”๋ก  ๋‹จ์ผ ํ‘œํ˜„์‹ ํด๋กœ์ €์˜ ์•”์‹œ์  ๋ฐ˜ํ™˜ ์ถ•์•ฝ๋œ ์ธ์ž ์ด๋ฆ„ ํ›„์œ„ ํด๋กœ์ € ๋ฌธ๋ฒ• { (๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ : ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…) -> ๋ฐ˜ํ™˜ํƒ€์ž… in ํด๋กœ์ € ํ‘œํ˜„์‹ ์ฝ”๋“œ } ํ›„ํ–‰ ํด๋กœ์ € (trailing closure) ํด๋กœ์ €๊ฐ€ ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ argument๋ผ๋ฉด, .. 2023. 2. 6.
๋ฐ˜์‘ํ˜•