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

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ381

[Swift] ํ”„๋กœํ† ์ฝœ ํ”„๋กœํ† ์ฝœ(Protocols)์–ด๋–ค ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ ์–ธํ•ด๋‘๋Š” ๊ฒƒํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์— ์˜ํ•ด ์ฑ„ํƒํ”„๋กœํ† ์ฝœ ๋ฌธ๋ฒ•protocol SomeProtocol {// protocol definition}ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ€์ž… ์ด๋ฆ„ ๋’ค์— ์ฝœ๋ก (:)์„ ๋ถ™์ด๊ณ  ํ”„๋กœํ† ์ฝœ ์ด๋ฆ„์„ ์ ์Œํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•  ๋•Œ๋Š” ํ”„๋กœํ† ์ฝœ์— ์ •์˜๋œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ ํ•ด์•ผ๋งŒ ํ•จ struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here}class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol { // class definition goes her.. 2024. 3. 29.
[Swift] ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์—๋Ÿฌ์˜ ํ‘œ์‹œ์™€ ๋ฐœ์ƒenum VendingMachineError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock}throw VendingMachineError.insufficientFunds(coinsNeeded: 5) ์—๋Ÿฌ ์ฒ˜๋ฆฌ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ํ•จ์ˆ˜์—์„œ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์—์„œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•do-catch ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ต์…”๋„ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•assert๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ•์ œ๋กœ ํฌ๋ž˜์‰ฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ์–ด๋–ค ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ํ˜น์€ ์ƒ์„ฑ์ž๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด throw ํ‚ค์›Œ๋“œ๋ฅผ ํ•จ์ˆ˜ ์„ ์–ธ.. 2024. 3. 28.
[Swift] ์˜ต์…”๋„ ์ฒด์ด๋‹ ์˜ต์…”๋„ ์ฒด์ด๋‹nil์ผ ์ˆ˜๋„ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋‚˜, ๋ฉ”์†Œ๋“œ ๊ทธ๋ฆฌ๊ณ  ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์— ์งˆ์˜(query)๋ฅผ ํ•˜๋Š” ๊ณผ์ •๋งŒ์•ฝ ์˜ต์…”๋„์ด ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์†Œ๋“œ ํ˜น์€ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ๋งŒ์•ฝ ๊ฐ’์ด nil์ด๋ผ๋ฉด nil ๋ฐ˜ํ™˜ ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘์˜ ๋Œ€์ฒด๋กœ์จ์˜ ์˜ต์…”๋„ ์ฒด์ด๋‹์˜ต์…”๋„ ๊ฐ’ ๋’ค์— ๋ฌผ์Œํ‘œ(?)๋ฅผ ๋ถ™์—ฌ์„œ ํ‘œํ˜„ ๊ฐ€๋Šฅ์˜ต์…”๋„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์—๋Š” ํ”„๋กœํผํ‹ฐ, ๋ฉ”์†Œ๋“œ ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ์˜ต์…”๋„ ๊ฐ’์„ ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ๋’ค์— ๋А๋‚Œํ‘œ(!)๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘์„ ํ–ˆ๋Š”๋ฐ ๋งŒ์•ฝ ๊ทธ ๊ฐ’์ด ์—†์œผ๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋ฐœ์ƒ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋Œ€์‹  nil์ด ๋ฐ˜ํ™˜class Person { var residence: Residence?}class Residence { var numberOfRo.. 2024. 3. 26.
[Swift] ์ดˆ๊ธฐํ™” ์ดˆ๊ธฐํ™” (Initialization)ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„ ์ž‘์—…์„ ํ•˜๋Š” ๋‹จ๊ณ„๊ฐ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ ๊ฐ’์„ ์„ค์ • →initializer๋ฅผ ์ •์˜ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ์œ„ํ•œ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ธ์Šคํ„ด์Šค์˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ๋ฐ˜๋“œ์‹œ ํŠน์ • ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ๋ผ์•ผ ํ•จ (๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์„ค์ •/ํŠน์ • ๊ฐ’์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅ)NOTEinitializer์—์„œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ์ง์ ‘ ์„ค์ •ํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ  ๊ฐ’ ํ• ๋‹น์ด ์ˆ˜ํ–‰ ์ด๋‹ˆ์…œ๋ผ์ด์ €ํŠน์ • ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ (์ด๋‹ˆ์…œ๋ผ์ด์ €์˜ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ_ ํŒŒ๋ผ๋ฏธํ„ฐ ์—†์ด init ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ)init() {// perform some initialization here}๊ธฐ๋ณธ ํ”„๋กœํผํ‹ฐํ”„๋กœํผํ‹ฐ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๊ฐ’์„ ํ• ๋‹น, ์ด ๊ฐ’์„ ์ดˆ๊ธฐ ๊ฐ’์œผ.. 2024. 3. 25.
[Swift] ์ƒ์† ์ƒ์†(Inheritance)ํด๋ž˜์Šค์—์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋ถ€ํ„ฐ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Œํด๋ž˜์Šค์—์„œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ, ๊ณ„์‚ฐ ํ”„๋กœํผํ‹ฐ ์ƒ๊ด€์—†์ด ์ƒ์† ๋ฐ›์€ ํ”„๋กœํผํ‹ฐ์— ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’ ์„ค์ •์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ์Œ๊ธฐ๋ฐ˜ํด๋ž˜์Šค๋‹ค๋ฅธ ์–ด๋–ค ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์ง€ ์•Š์€ ํด๋ž˜์Šค SomeSuperclass์„œ๋ธŒํด๋ž˜์‹ฑ๋ถ€๋ชจ๋กœ ๋ถ€ํ„ฐ ์„ฑ๊ฒฉ์„ ์ƒ์†๋ฐ›๊ณ  ์ž์‹  ๊ณ ์œ ์˜ ํŠน์„ฑ๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œclass SomeSubclass: SomeSuperclass { // subclass definition goes here}์„œ๋ธŒํด๋ž˜์‹ฑ์€ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ (Overriding)์„œ๋ธŒํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ๊ฒƒ์„ ์žฌ์ •์˜์ธ์Šคํ„ด์Šค, ๋ฉ”์†Œ๋“œ, ํƒ€์ž… ๋ฉ”์†Œ๋“œ, ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ, ํƒ€์ž… ํ”„๋กœํผํ‹ฐ, ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋‘ ๊ฐ€๋Šฅ๋‹ค๋ฅธ ์„ ์–ธ ์•ž์— overrideํ‚ค์›Œ๋“œ ๋ถ™์—ฌ .. 2024. 3. 22.
[Swift] ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ(Subscripts)ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ๊ทธ๋ฆฌ๊ณ  ์—ด๊ฑฐํ˜•์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ์ฝœ๋ ‰์…˜, ๋ฆฌ์ŠคํŠธ, ์‹œํ€€์Šค ๋“ฑ ์ง‘ํ•ฉ์˜ ํŠน์ • ๋ฉค๋ฒ„ ์—˜๋ฆฌ๋จผํŠธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ถ”๊ฐ€์ ์ธ ๋ฉ”์†Œ๋“œ ์—†์ด ํŠน์ • ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œํ•˜๋‚˜์˜ ํƒ€์ž…์— ์—ฌ๋Ÿฌ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ  ์˜ค๋ฒ„๋กœ๋“œ(Overload)๋„ ๊ฐ€๋Šฅ๋‹จ์ผ ์ธ์ž ๊ฐ’์„ ๋„˜์–ด, ํ•„์š”์— ๋”ฐ๋ผ ๋ณต์ˆ˜ ์ธ์ž ๊ฐ’ ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ• (Subscript Syntax)์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ๊ณ -์“ฐ๊ธฐ(read-write) ํ˜น์€ ์ฝ๊ธฐ ์ „์šฉ(read only)๋งŒ ๊ฐ€๋Šฅsetter, getter ๋ฐฉ์‹์„ ๋”ฐ๋ฆ„subscript(index: Int) -> Int { get { // ์ ์ ˆํ•œ ๋ฐ˜ํ™˜ ๊ฐ’ } set(newValue) { .. 2024. 3. 22.
๋ฐ˜์‘ํ˜•