๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

โŒจ๏ธ Language/swift251

[Swift] ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ(Subscripts)ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ๊ทธ๋ฆฌ๊ณ  ์—ด๊ฑฐํ˜•์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ์ฝœ๋ ‰์…˜, ๋ฆฌ์ŠคํŠธ, ์‹œํ€€์Šค ๋“ฑ ์ง‘ํ•ฉ์˜ ํŠน์ • ๋ฉค๋ฒ„ ์—˜๋ฆฌ๋จผํŠธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ถ”๊ฐ€์ ์ธ ๋ฉ”์†Œ๋“œ ์—†์ด ํŠน์ • ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œํ•˜๋‚˜์˜ ํƒ€์ž…์— ์—ฌ๋Ÿฌ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ  ์˜ค๋ฒ„๋กœ๋“œ(Overload)๋„ ๊ฐ€๋Šฅ๋‹จ์ผ ์ธ์ž ๊ฐ’์„ ๋„˜์–ด, ํ•„์š”์— ๋”ฐ๋ผ ๋ณต์ˆ˜ ์ธ์ž ๊ฐ’ ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ• (Subscript Syntax)์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ๊ณ -์“ฐ๊ธฐ(read-write) ํ˜น์€ ์ฝ๊ธฐ ์ „์šฉ(read only)๋งŒ ๊ฐ€๋Šฅsetter, getter ๋ฐฉ์‹์„ ๋”ฐ๋ฆ„subscript(index: Int) -> Int { get { // ์ ์ ˆํ•œ ๋ฐ˜ํ™˜ ๊ฐ’ } set(newValue) { .. 2024. 3. 22.
[Swift] ๋ฉ”์„œ๋“œ ๋ฉ”์„œ๋“œ(Methods)ํŠน์ • ํƒ€์ž…์˜ ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•๊ณผ ๊ด€๋ จ๋œ ํ•จ์ˆ˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ (Instance Methods)ํŠน์ • ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์˜ ์ธ์Šคํ„ด์Šค์— ์†ํ•œ ๋ฉ”์„œ๋“œ์ธ์Šคํ„ด์Šค ๋‚ด์˜ ๊ฐ’์„ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์ธ์Šคํ„ด์Šค๊ฐ€ ์†ํ•œ ํŠน์ • ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅclass Counter { var count = 0 func increment() { count += 1 } func increment(by amount: Int) { count += amount } func reset() { count = 0 }}let counter = Counter()// ์ดˆ๊ธฐ count ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค.counter.increment()// co.. 2024. 3. 21.
[Swift] ํ”„๋กœํผํ‹ฐ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๊ณ„์‚ฐ ํ”„๋กœํผํ‹ฐ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ณ  ํŠน์ •ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด ์ฃผ๋Š” ํ”„๋กœํผํ‹ฐํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋ชจ๋‘์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ์ €์žฅ ํ”„๋กœํผํ‹ฐletํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์ˆ˜ ํ˜น์€ varํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด ์‚ฌ์šฉstruct FixedLengthRange { var firstValue: Int let length: Int}var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)// ๋ฒ”์œ„ ๊ฐ’์€ 0, 1, 2 ์ž…๋‹ˆ๋‹ค.rangeOfThreeItems.firstValue = 6// ๋ฒ”์œ„ ๊ฐ’์€ 6, 7, 8 ์ž…๋‹ˆ๋‹ค. ์ƒ์ˆ˜ ๊ตฌ์กฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์ˆ˜(let)๋กœ .. 2024. 3. 20.
[Swift] ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด ํด๋ž˜์Šค VS ๊ตฌ์กฐ์ฒด๊ณตํ†ต์ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํผํ‹ฐ ์ •์˜๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ ์ •์˜ subscript ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด ํŠน์ • ๊ฐ’์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” subscript ์ •์˜์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” initializer ์ •์˜๊ธฐ๋ณธ ๊ตฌํ˜„์—์„œ ๊ธฐ๋Šฅ ํ™•์žฅํŠน์ •ํ•œ ์ข…๋ฅ˜์˜ ํ‘œ์ค€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ์ˆœ์‘(conform)์ฐจ์ด์ (ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅ)์ƒ์† (Inheritance): ํด๋ž˜์Šค์˜ ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ๋ฌผ๋ ค ์คŒํƒ€์ž… ์บ์ŠคํŒ… (Type casting): ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์„ ํ™•์ธ์†Œ๋ฉธ์ž (Deinitializers): ํ• ๋‹น๋œ ์ž์›์„ ํ•ด์ œ(free up) ์‹œํ‚ด์ฐธ์กฐ ์นด์šดํŠธ (Reference counting): ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์— ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ฃผ ๋ชฉ์ ์ด ๊ด€๊ณ„๋œ ๊ฐ„๋‹จํ•œ ๊ฐ’.. 2024. 3. 19.
[Swift] ํด๋กœ์ € ํด๋กœ์ €(Closures)์–ด๋–ค ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ์บก์ฒ˜(๊ฐ’์˜ ์ฐธ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.)ํ•ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ธ”๋ŸญSwift๋Š” ๊ด€๋ จ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ์ฒ˜๋ฆฌ ํด๋กœ์ €์˜ ํ˜•ํƒœ์ „์—ญ ํ•จ์ˆ˜ : ์ด๋ฆ„์ด ์žˆ๊ณ  ์–ด๋–ค ๊ฐ’๋„ ์บก์ฒ˜ํ•˜์ง€ ์•Š๋Š” ํด๋กœ์ €์ค‘์ฒฉ ํ•จ์ˆ˜ : ์ด๋ฆ„์ด ์žˆ๊ณ  ๊ด€๋ จํ•œ ํ•จ์ˆ˜(ํ•˜์œ„→์ƒ์œ„)๋กœ ๋ถ€ํ„ฐ ๊ฐ’์„ ์บก์ฒ˜ ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋กœ์ €ํด๋กœ์ € ํ‘œํ˜„ : ๊ฒฝ๋Ÿ‰ํ™” ๋œ ๋ฌธ๋ฒ•์œผ๋กœ ์“ฐ์—ฌ์ง€๊ณ  ๊ด€๋ จ๋œ ๋ฌธ๋งฅ(context)์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ์บก์ณํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์ด ์—†๋Š” ํด๋กœ์ € ํด๋กœ์ € ํ‘œํ˜„ (Closure Expressions)์ธ๋ผ์ธ ํด๋กœ์ €๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ๋ฒ•์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ์žˆ์Œ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ๊ณผ ์˜๋„๋ฅผ ์žƒ์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๋ฌธ๋ฒ•์„ ์ถ•์•ฝํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ๋ฒ•์˜ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต ์ •๋ ฌ ๋ฉ”์†Œ๋“œ(The Sorted Method)Swift ํ‘œ์ค€ ๋ผ์ด๋ธŒ.. 2024. 3. 18.
[Swift] ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ํ•จ์ˆ˜ 1. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์˜ ๊ฐœ๋…ํ”„๋กœ๊ทธ๋žจ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ํ•ญ์ƒ ์›ํ•˜๋Š”๋Œ€๋กœ ์ •ํ™•ํžˆ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ์„ ํ•ญ์ƒ ๊ณ ๋ คํ•ด์•ผ ํ•จguardguard ์กฐ๊ฑด else {์กฐ๊ฑด์ด ๊ฑฐ์ง“์ผ ๋•Œ ์‹คํ–‰๋  ๊ตฌ๋ฌธ}// someValue ๊ฐ€ 0์ด ์•„๋‹ ๊ฒฝ์šฐ์—๋งŒ ์ถœ๋ ฅguard someValue != 0 else { return }print(someValue)์กฐ๊ฑด๋“ค์„ ๊ฑธ๋Ÿฌ๋‚ผ ๋•Œ ์‚ฌ์šฉ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ์กฐ๊ฑด์‹์— ์ด ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ๊ทธ๋Œ€๋กœ ์ ๋Š”๋‹ค๋Š” ์ ์—์„œ guard ๊ตฌ๋ฌธ์ด ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•  ๋•Œ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์งfunc printMessage(_ message: String?) { if message == nil { return } print(.. 2024. 3. 17.
๋ฐ˜์‘ํ˜•