iOS ์•ฑ ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜/TIL

2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ•์ข…ํ•ฉ๋ฐ˜ ๊ธฐ์ดˆ_(3์ผ์ฐจ)

yeggrrr๐Ÿผ 2024. 3. 6. 21:27
728x90

 



<TIL>

๋ฌธ๋ฒ• ๊ธฐ์ดˆ ์ •๋ฆฌ TIL์€ ์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์ด ๋งˆ์ง€๋ง‰์ด๋‹ค!
์ด๋ฒˆ ์ฃผ์ฐจ ๊ฐ•์˜ ์ด ์‹œ๊ฐ„์ด 2์‹œ๊ฐ„ 50๋ถ„ ์ •๋„๋ผ์„œ 'ํ•˜๋ฃจ ๋งŒ์— ๋‹ค ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค!^0^'๋ผ๋Š” ๊ณ„ํš์€ ์™€์žฅ์ฐฝ..ใ…Žใ…Ž;
3์ผ์ฐจ์ธ ์˜ค๋Š˜, ๋“œ๋””์–ด ๋‹ค ๋ดค๋‹ค.
๋ณด๊ณ , ๋˜ ๋ณด๊ณ , ๋Œ๋ ค๋ณด๊ณ , ๋ฉˆ์ถฐ๋†“๊ณ  ์ดํ•ดํ•˜๊ณ , TIL ์ •๋ฆฌํ•˜๊ณ , ๋“ฑ๋“ฑ...
ํ–ˆ๋”๋‹ˆ.. 3์ผ์งธ..๐Ÿ˜‚ ๋ฌธ์ œ๋Š” ์•„์ง๋„ ์™„์ „ํžˆ ์ดํ•ดํ•œ ๊ฑด ์•„๋‹ˆ๋ผ์„œ..
(๊ฐ•์˜ ๋ณด๋Š” ์‹œ๊ฐ„๋Œ€๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ• ์ง€๋„.. ์˜ค์ „์—” ๋ชฝ๋กฑํ•ด์„œ ๋” ๋จธ๋ฆฌ์— ์ž˜ ์•ˆ ๋“ค์–ด์˜ค๋Š” ๋“ฏ์‹ถ๋‹ค..ใ…‹ใ…‹ใ…‹ํใ… ..)
๋ฉ์ฒญํ•˜๋ฉด ๋ชธ์ด ๊ณ ์ƒํ•œ๋‹ค๋”๋‹ˆ, ๋จธ๋ฆฌ๊ฐ€ ์•ˆ ์ข‹์•„์„œ ์‹œ๊ฐ„์„ ๋” ๋งŽ์ด ์Ÿ์•„์•ผํ•˜๋Š” ๋‚˜ ์ž์‹ ..

๋‹ค ์ดํ•ดํ•˜๋ ค๊ณ  ํ•˜์ง€ ๋ง๊ณ  ๊ทธ๋ƒฅ ๋ฐ›์•„๋“ค์—ฌ์•ผ ํ•œ๋‹ค๋Š”๋ฐ, ์•„์ง ๊ทธ๊ฒŒ ์ž˜ ์•ˆ๋œ๋‹ค. 

๋‚˜์ค‘์— '์ด๊ฑธ ์™œ ๋ฐ”๋กœ ์ดํ•ด ๋ชป ํ–ˆ์ง€?' ์–ด์ด์—†์–ดํ•˜๋Š” ์ˆœ๊ฐ„์ด ์–ผ๋ฅธ ์™”์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.
์‚ฌ์ „ ์บ ํ”„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์‹  ๋ถ„๋“ค์€ ์ด๋ฏธ ๋‹ค ํ’€์—ˆ์„ ๋ฐ€๋ฆฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์™€ swift ๋ฌธ๋ฒ• ๊ณต๋ถ€๋ฅผ ์ฃผ๋ง์— ์ถ”๊ฐ€๋กœ ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

์•„๋ž˜ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์€ ์ง์ „ ๊ฒŒ์‹œ๋ฌผ์— ์ด์–ด์„œ
'ํด๋ž˜์Šค(class), ๊ตฌ์กฐ์ฒด(struct), ์—ด๊ฑฐํ˜•(enum), ์ƒ์†, ์ดˆ๊ธฐํ™”'์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค.

์•„์ง ๋‚ด์šฉ ์ดํ•ด์™€ ๋ง๋กœ ํ’€์–ด๋‚ด๋Š”๋ฐ ์–ด๋ ค์›€์ด ์žˆ๋Š” ์ƒํƒœ๋ผ ๊ฐ•์˜์™€ ํก์‚ฌํ•œ ๋‚ด์šฉ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.
์ถ”ํ›„์— ์™„์ „ํžˆ ์ดํ•ดํ•˜๋Š” ๋Œ€๋กœ ๋‚ด ๋ง๋กœ ํ’€์–ด์„œ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•œ๋‹ค!



 

ํด๋ž˜์Šค(class) 


โ‘  ํด๋ž˜์Šค๋Š” ํ”„๋กœํผํ‹ฐ(Property)์™€ ๋ฉ”์„œ๋“œ(Method)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.


โ–ถ๏ธŽ ํ”„๋กœํผํ‹ฐ(Properties)
- ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ๋˜๋Š” ์—ด๊ฑฐํ˜• ์•ˆ์— ์žˆ๋Š” ๋ณ€์ˆ˜ ํ˜น์€ ์ƒ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- ํด๋ž˜์Šค์˜ ์†์„ฑ์œผ๋กœ ๊ฐ์ฒด(Object)์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ œ๊ณตํ•œ๋‹ค.
  ์ด๋Ÿฌํ•œ ์ƒํƒœ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค(Instance)๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- ํ”„๋กœํผํ‹ฐ๋Š” ์ €์žฅ ํ”„๋กœํผํ‹ฐ(Stored Properties)์™€ ๊ณ„์‚ฐ ํ”„๋กœํผํ‹ฐ(Computed Properties)๋กœ ๋‚˜๋‰œ๋‹ค.
   โ–ท ์ €์žฅ ํ”„๋กœํผํ‹ฐ(Stored Properties)
   → ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ์ธ์Šคํ„ด์Šค(Instance)์˜ ์ผ๋ถ€๋กœ์„œ ๊ทธ ๊ฐ’์„ ์œ ์ง€ํ•จ.
   โ–ท ๊ณ„์‚ฐ ํ”„๋กœํผํ‹ฐ(Computed Properties)
   → ํŠน์ •ํ•œ ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ๊ณ„์‚ฐ๋จ.

โ–ถ๏ธŽ ๋ฉ”์„œ๋“œ(Method)
- ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ๋˜๋Š” ์—ด๊ฑฐํ˜• ์•ˆ์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- ํด๋ž˜์Šค์˜ ๋™์ž‘์„ ์ •์˜ํ•˜๊ณ , ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค(Instance)์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋˜๋Š” ํŠน์ •ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

- ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ(Instance Methods)์™€ ํƒ€์ž… ๋ฉ”์„œ๋“œ(Type Methods)๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
  โ–ท ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ(Instance Methods)
   → ํŠน์ • ์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ.

  โ–ท ํƒ€์ž… ๋ฉ”์„œ๋“œ(Type Methods)
   → ํด๋ž˜์Šค ์ž์ฒด์™€ ๊ด€๋ จ๋œ ๋™์ž‘์„ ์ •์˜ํ•˜๋ฉฐ, ํŠน์ • ์ธ์Šคํ„ด์Šค์— ์†ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํด๋ž˜์Šค ์ž์ฒด์— ์˜ํ–ฅ์„ ์คŒ.

โ‘ก ํด๋ž˜์Šค๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ €(Initializer)๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
(ํ”„๋กœํผํ‹ฐ์— ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ → ์ด๋‹ˆ์…œ๋ผ์ด์ € ํ•„์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•จ. ์•ˆ๊ทธ๋Ÿฌ๋ฉด error ๋ฐœ์ƒํ•จ)

โ‘ข ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋‹ค. (์ฐธ์กฐ ํƒ€์ž…์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ: ํด๋ž˜์Šค(class))

๐Ÿง์ฐธ์กฐํƒ€์ž…?๐Ÿง
→ ๋ณ€์ˆ˜ ํ˜น์€ ์ƒ์ˆ˜์— ํ• ๋‹น๋  ๋•Œ, ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฐธ์กฐ(์ฃผ์†Œ)๊ฐ€ ๋ณต์‚ฌ๋˜์–ด ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ.
→ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฏ€๋กœ, ํ•œ ์ชฝ์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค๋ฅธ ์ชฝ์—์„œ๋„ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋จ.



๊ตฌ์กฐ์ฒด(struct)

โ‘  ๊ตฌ์กฐ์ฒด(struct)๋Š” ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ ,
์ด๊ฒƒ์„ ํ•˜๋‚˜๋กœ ์บก์Аํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์ด๋‹ค.

โ‘ก ์ƒ์„ฑ์ž(initializer)๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ตฌ์กฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ž(Memberwise Initializer)๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
( → ํด๋ž˜์Šค(class)์™€์˜ ์ฐจ์ด์  1)

โ‘ข ๊ฐ’ ํƒ€์ž…
- ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹น๋  ๋•Œ ๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋˜๋Š” ํƒ€์ž…์ด๋‹ค.
- ์ฃผ๋กœ ๊ตฌ์กฐ์ฒด(Structures), ์—ด๊ฑฐํ˜•(Enumerations), ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(Int, Double, Bool, ๋“ฑ)์ด ๊ฐ’ ํƒ€์ž…์— ํ•ด๋‹นํ•œ๋‹ค.

โ‘ฃ ์ƒ์†์„ ํ•  ์ˆ˜ ์—†๋‹ค.
( → ํด๋ž˜์ˆ˜(class)์™€์˜ ์ฐจ์ด์  2)

โ‘ค ํด๋ž˜์Šค(class)์™€ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค(Instance)๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



์—ด๊ฑฐํ˜•(Enum)

โ‘  Enum์€ ๊ด€๋ จ๋œ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ฃน์„ ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•ด์„œ
    ํƒ€์ž… ์•ˆ์ „์„ฑ(type-safety)๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

โ‘ก ๊ฐ’ ํƒ€์ž…

โ‘ข ์—ฐ๊ด€ ๊ฐ’(Associated Values)์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ case๊ฐ€ ํŠน์ • ๊ฐ’์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
→ switch ๋ฌธ๊ณผ ๊ถํ•ฉ์ด ์ข‹๋‹ค.(๊ฐ ์—ด๊ฑฐํ˜• ์ผ€์ด์Šค์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.)

โ‘ค Optional์€ enum์ด๋‹ค.
→ (์ฐธ๊ณ ) https://docs.swift.org/swift-book/documentation/the-swift-programming-language/enumerations/

 

ํด๋ž˜์Šค & ๊ตฌ์กฐ์ฒด & ์—ด๊ฒจํ˜• ์ฐจ์ด์ 

โ‘  (๋น„์œ ) - ํด๋ž˜์Šค: ๋ถ•์–ด๋นต ๊ธฐ๊ณ„ / ๊ฐ์ฒด: ๊ทธ ๊ธฐ๊ณ„๋กœ ๋งŒ๋“ค์–ด์ง„ ์‹ค์ œ

โ‘ก ๊ฐ์ฒด → ํด๋ž˜์Šค๋ฅผ ์‹ค์ฒดํ™” ํ•œ ๊ฒƒ (๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋œ ๊ฒƒ)

โ‘ข ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ ๋ฐฉ์‹
- ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•
1) ๊ฐ’ ํƒ€์ž…(Value Type)
2) ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์Šคํƒ(Stack)์— ์ €์žฅ
3) ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ๋งˆ๋‹ค ๋ณต์‚ฌ๋ณธ ์ƒ์„ฑ
4) ์Šคํƒ(Stack)์˜ ๊ณต๊ฐ„์— ์ €์žฅ, ์Šคํƒ ํ”„๋ ˆ์ž„ ์ข…๋ฃŒ์‹œ, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋™ ์ œ๊ฑฐ

- ํด๋ž˜์Šค
1) ์ฐธ์กฐ ํƒ€์ž…(Reference Type)
2) ARC์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
3) ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ๋Š” ํž™(Heap)์— ์ €์žฅ
4) ํ•ด๋‹น ํž™์„ ๊ฐ€๋ฅดํ‚ค๋Š” ๋ณ€์ˆ˜๋Š” ์Šคํƒ(Stack)์— ์ €์žฅํ•˜๊ณ  ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์ด ํž™์„ ๊ฐ€๋ฆฌํ‚ด
5) ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌ




์ƒ์†(Inheritance)

โ‘  ํด๋ž˜์Šค(class) ๊ฐ„์— ์ฝ”๋“œ ๋ฐ ์†์„ฑ์„ ๊ณต์œ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค.

โ‘ก ๊ธฐ์กด ํด๋ž˜์Šค์—์„œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ,
๊ธฐ์กด ํด๋ž˜์Šค์˜ ํŠน์„ฑ(์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ)์„ ์žฌ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.(์„œ๋ธŒ ํด๋ž˜์‹ฑ)

 ๐Ÿง์žฅ์ ๐Ÿง
1) ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ: ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ
2) ๊ณ„์ธต ๊ตฌ์กฐ: ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค ๊ฐ„์— ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”์™€ ๋ถ„๋ฅ˜๊ฐ€ ๊ฐ€๋Šฅํ•จ.

โ‘ข override, super, final
- override
1) ์ด ํ‚ค์›Œ๋“œ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ, ์†์„ฑ ๋˜๋Š” ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋‹ค์‹œ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
2) ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์„ ์ œ๊ณตํ•œ๋‹ค.

- super
1) ์ด ํ‚ค์›Œ๋“œ๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ, ์†์„ฑ ๋˜๋Š” ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
2) super.method() ๋˜๋Š” super.property ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

- final
1) ์ด ํ‚ค์›Œ๋“œ๋Š” ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ์†์„ฑ ๋˜๋Š” ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ‘œ์‹œํ•ญ ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.
2) ๋ฉ”์„œ๋“œ, ์†์„ฑ, ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์— ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ฉค๋ฒ„๋“ค์„ 'Override' ํ•  ์ˆ˜ ์—†๋‹ค.



์ดˆ๊ธฐํ™”

โ–ถ๏ธŽ ์ดˆ๊ธฐํ™”์™€ ์ƒ์„ฑ์ž
โ‘  ์ดˆ๊ธฐํ™”๋Š” ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ๋˜๋Š” ์—ด๊ฑฐํ˜•์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์†์„œ์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
โ‘ก ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ  ์†์„ฑ์ด ์ ์ •ํžˆ ์„ค์ •๋˜์–ด ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ค‘์š”ํ•œ ๋‹จ๊ณ„์ด๋‹ค.

โ–ท ์ธ์Šคํ„ด์Šค?
โ‘  ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด ๋˜๋Š” ์—ด๊ฑฐํ˜•๊ณผ ๊ฐ™์€ ํƒ€์ž…์˜ ์‹ค์ œ ์˜ˆ์‹œ(์ƒ์„ฑ๋œ ์‹ค์ œ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
โ‘ก ์ฆ‰, ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด(Object)๋ฅผ ๋งํ•œ๋‹ค.

โ–ท ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ•
1. ๊ธฐ๋ณธ ์ดˆ๊ธฐํ™”(Default Intitialization)
- ํด๋ž˜์Šค์˜ ์†์„ฑ์ด ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜๋Š” ๊ฒƒ. (์ž๋™์œผ๋กœ ๋ฐœ์ƒ)

class Panda {
        var name: String = ""
        var age: Int = 0
}

let panda = Panda()     // ← ๊ธฐ๋ณธ ์ดˆ๊ธฐํ™”

2. ์ง€์ • ์ดˆ๊ธฐํ™”(Designated Initialization)
- init ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์†์„ฑ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ.

class Panda {
        var name: String
        var age: Int

        init(name: String, age: Int) {
                self.name = name
                self.age = age
        }
}
let panda = Panda(name: "Fubao", age: 3)     // ← ์ง€์ • ์ดˆ๊ธฐํ™”

3. ํŽธ์˜ ์ดˆ๊ธฐํ™”(Convenience Initialization)
- ์œ„ ๋‘ ๊ฐ€์ง€ ์ดˆ๊ธฐํ™”๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ˜ธ์ถœํ•˜๋Š” ๋ณด์กฐ ๋ฉ”์„œ๋“œ.

class Panda {
        var name: String
        var age: Int

        init(name: String, age: Int) {
                self.name = name
                self.age = age
        }

        convenience init(name: String) {
                self.init(name: name, age: 0)
        }
}

let panda = Panda(name: "Fubao")           // ← ํŽธ์˜ ์ดˆ๊ธฐํ™”

4. ๊ฐ•์ œ ํ•ด์žฌ(Force Unwrapping)๋˜์ง€ ์•Š๋Š” ์˜ต์…”๋„ ์ดˆ๊ธฐํ™”
- ์˜ต์…”๋„ ํƒ€์ž…์„ ๊ฐ€์ง„ ์†์„ฑ์€ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋˜๊ฑฐ๋‚˜ ๋‚˜์ค‘์— ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ.

class Panda {
        var name: String?
        var age: Int = 0
}

let panda = Panda()
panda.name = "Fubao"
panda.age = 3




 

728x90