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

3์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ•์ข…ํ•ฉ๋ฐ˜ ์‹ฌํ™”_(1์ผ์ฐจ)

yeggrrr๐Ÿผ 2024. 3. 11. 17:34


<TIL>
์˜ค๋Š˜๋ถ€ํ„ฐ swift ๋ฌธ๋ฒ• ๊ธฐ์ดˆ์—์„œ ์‹ฌํ™” ๊ฐ•์˜ ์‹œ์ž‘!
1๊ฐ•๋ถ€ํ„ฐ 4๊ฐ•๊นŒ์ง€ ๋ดค๋Š”๋ฐ, ๋ฌด์Šจ ๋ง์ธ์ง€...๐Ÿคฏ
๋˜ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณด๋Š”์ค‘์ด๋‹ค..ใ…Žใ…Ž
[๋‚ด๋ฐฐ์บ ] ๊ฐ•์˜ ๋จผ์ € ๋‹ค ๋ณด๊ณ , ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์€ ์œ ํŠœ๋ธŒ ๊ฐ•์˜ ์ฐพ์•„์„œ ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
์ด๋ฒˆ ์ฃผ ์‹ฌํ™” ๊ณผ์ œ๋Š” '์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ'์ธ๋ฐ,
์•„์ง ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ..
์ผ๋‹จ ์˜ค๋Š˜ ๋‚ด์ผ์€ ๊ฐ•์˜ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ค์œผ๋ฉด์„œ ๊ณต๋ถ€ํ•  ์˜ˆ์ •์ด๋‹ค.

์˜ค๋Š˜ ์ •๋ฆฌํ•  ๋‚ด์šฉ์€
'ํ”„๋กœํผํ‹ฐ์™€ ์˜ต์ €๋ฒ„', 'ํƒ€์ž…์บ์ŠคํŒ…', '์ ‘๊ทผ์ œํ•œ์ž'์ด๋‹ค.



ํ”„๋กœํผํ‹ฐ์™€ ์˜ต์ €๋ฒ„
(Property Observer)


ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ, "์ €์žฅ ํ”„๋กœํผํ‹ฐ"์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ƒˆ ๊ฐ’์˜ ์†์„ฑ์ด ํ˜„์žฌ ๊ฐ’๊ณผ ๋™์ผํ•˜๋”๋ผ๋„ ์†์„ฑ ๊ฐ’์ด ์„ค์ •๋˜๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.

๋ง ๊ทธ๋Œ€๋กœ, ๊ด€์ฐฐ๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ
(๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ์‹คํ–‰๋˜๋Š” ๊ฒƒ)์ด
๋ฐ”๋กœ 'Property Observer'๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.๐Ÿ˜€


ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„(Property Observer)์—๋Š” ๋‘ ๊ฐ€์ง€ ์†์„ฑ์ด ์žˆ๋‹ค.

โ‘  didSet
→ ๊ฐ’์ด ์ €์žฅ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋œ๋‹ค.

โ‘ก willSet
→ ์ƒˆ๋กœ์šด ๊ฐ’์ด ์ €์žฅ๋œ ์งํ›„์— ํ˜ธ์ถœ๋œ๋‹ค.


โ‘ 
'didSet' ์˜ต์ €๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด,
๊ฐ’์ด ์ €์žฅ๋œ "์งํ›„"์— ์ด์ „ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด "ํŒŒ๋ผ๋ฏธํ„ฐ"๋กœ ์ „๋‹ฌ ๋œ๋‹ค.

์ด๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๊ณผ ๊ด„ํ˜ธ๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
์ด์ „ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด 'oldValue'๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


โ‘ก
'willSet' ์˜ต์ €๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด,
๊ฐ’์ด ์ €์žฅ๋˜๊ธฐ "์ง์ „"์— ์ƒˆ๋กœ ์ €์žฅ๋  ๊ฐ’์ด "ํŒŒ๋ผ๋ฏธํ„ฐ"๋กœ ์ „๋‹ฌ ๋œ๋‹ค.

์ด๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๊ณผ ๊ด„ํ˜ธ๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด 'newValue'๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


willSet ๋ณด๋‹ค๋Š didSet์ด ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
willSet๊ณผ didSet์„ ๋‘˜ ๋‹ค ์ž‘์„ฑํ–ˆ์„ ๊ฒฝ์šฐ willSet์ด ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.

<์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ>
- ์ €์žฅ ํ”„๋กœํผํ‹ฐ(stored property)
- ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ(computed property)






ํƒ€์ž…์บ์ŠคํŒ…
(Type Casting)

ํƒ€์ž…์บ์ŠคํŒ…์€ '๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค'์ด๋‹ค.


ํƒ€์ž…์บ์ŠคํŒ…์„ ๊ณต๋ถ€ํ•˜๊ธฐ ์ „์— is ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ์•„๋ณด์ž!


<is ์—ฐ์‚ฐ์ž - ํƒ€์ž… ์ฒดํ‚น(Type Checking)>
is ์—ฐ์‚ฐ์ž๋Š” ํƒ€์ž…์„ ์ฒดํฌํ•˜๋Š” ์—ฐ์‚ฐ์ž๋กœ, ๋น„๊ต ๊ฒฐ๊ณผ๋ฅผ bool ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


<as ์—ฐ์‚ฐ์ž - ํƒ€์ž… ์บ์ŠคํŒ…(Type Casting)>
as ์—ฐ์‚ฐ์ž๋Š” ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜, 
ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ์Šˆํผ ํด๋ž˜์Šค(๋ถ€๋ชจํด๋ž˜์Šค)๋‚˜ ํ•˜์œ„ ํด๋ž˜์Šค(์ž์‹ ํด๋ž˜์Šค)๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๐Ÿ’กType ์ข…๋ฅ˜๐Ÿ’ก
- ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(Int, Double, Bool, String, ...)
- ์˜ต์…”๋„(Optional)
- ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ ํƒ€์ž…(struct, class, enun, protocol, ...)


โ‘  as
- ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์บ์ŠคํŒ…์ด ์‹คํ–‰๋œ๋‹ค.
(์ฆ‰, ํƒ€์ž… ์บ์ŠคํŒ…์ด ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)

- ์บ์ŠคํŒ…์— ์‹คํŒจํ•  ๊ฒฝ์šฐ error ๋ฐœ์ƒํ•œ๋‹ค.

- ์บ์ŠคํŒ…ํ•˜๋ ค๋Š” ํƒ€์ž…์ด ๊ฐ™์€ ํƒ€์ž…์ด๊ฑฐ๋‚˜ ์Šˆํผํด๋ž˜์Šค ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

โ‘ก as?
- ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„์—์„œ ์บ์ŠคํŒ…์ด ์‹คํ–‰๋œ๋‹ค.

- ์„ฑ๊ณตํ•˜๋ฉด ์˜ต์…”๋„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ ,
์‹คํŒจํ•˜๋ฉด nil์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
(์‹คํŒจํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด 'as?' ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ)
 
โ‘ข as!
- ๋Ÿฐํƒ€์ž„์— ํŠน์ • ํƒ€์ž…์œผ๋กœ ๊ฐ•์ œ ์บ์ŠคํŒ…ํ•œ๋‹ค.

- ๊ฐ•์ œ ํƒ€์ž… ์บ์ŠคํŒ…์— ์‹คํ•ดํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

- ์บ์ŠคํŒ…์— ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (์˜ต์…”๋„ X)


์ ‘๊ทผ์ œํ•œ์ž
(Access Control)

์ ‘๊ทผ์ œํ•œ์ž๋Š” ์ฝ”๋“œ ์š”์†Œ์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„์˜ ์ ‘๊ทผ์„ฑ๊ณผ ๋ณด์•ˆ์„ ์กฐ์ ˆํ•œ๋‹ค.

๋‹ค๋ฅธ ์†Œ์Šค ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ์ด ํ•ด๋‹น ์ฝ”๋“œ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•œ๋‹ค.
(์ฆ‰, ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Access Control์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋กœ์˜ ์ ‘๊ทผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ)
→ ์šฐ๋ฆฌ ์ฝ”๋“œ์˜ ์„ธ๋ถ€ ๊ตฌํ˜„ ์‚ฌํ•ญ์„ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋‹ค. (์€๋‹‰ํ™”) 

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


open < public < internal < fileprivate < private
[์ œ์•ฝ์ด ์ ์Œ] → [์ œ์•ฝ์ด ๋งŽ์Œ]

โ‘  open
๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ์—์„œ ํ•ด๋‹น level ์ ‘๊ทผ ๊ฐ€๋Šฅ + ๋ชจ๋“  ๊ณณ์—์„œ ์„œ๋ธŒํด๋ž˜์‹ฑ ๊ฐ€๋Šฅ

โ‘ก public
๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ์—์„œ ํ•ด๋‹น level ์ ‘๊ทผ ๊ฐ€๋Šฅ + ๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋งŒ ์„œ๋ธŒํด๋ž˜์‹ฑ ๊ฐ€๋Šฅ

โ‘ข internal
๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

โ‘ฃ fileprivate
๊ฐ™์€ ์†Œ์ŠคํŒŒ์ผ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

โ‘ค private
ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ


- ์ ‘๊ทผ์ œํ•œ์ž(Access Cotrol)์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด 'internal'๋กœ ํŒ๋‹จํ•œ๋‹ค.
- ์ƒ์œ„ ์š”์†Œ๋ณด๋‹ค ํ•˜์œ„ ์š”์†Œ๊ฐ€ ๋” ๋†’์€ ์ ‘๊ทผ ์ˆ˜์ค€์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.


๐Ÿ’ก๋ชจ๋“ˆ(module)๐Ÿ’ก
- ๋ฐฐํฌํ•  ์ฝ”๋“œ์˜ ๋ฌถ์Œ ๋‹จ์œ„
- ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„ ์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ชจ๋“ˆ ๋‹จ์œ„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ
- import ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก์†Œ์Šค ํŒŒ์ผ๐Ÿ’ก
- ํ•˜๋‚˜์˜ swift ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ ์˜๋ฏธ


โ–ท public, open
- ๋‘˜ ๋‹ค ๋ชจ๋“ˆ ์™ธ๋ถ€๊นŒ์ง€ ์ ‘๊ทผ ๊ฐ€๋Šฅ.

- open์€ ํด๋ž˜์Šค์™€ ํด๋ž˜์Šค ๋งด๋ฒ„์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์„œ๋ธŒํด๋ž˜์‹ฑ์ด ๊ฐ€๋Šฅํ•จ.
(public์€ ๊ทธ๋ ‡์ง€ ์•Š์Œ)

- open์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๊ฐœ๋ฐฉ ์ ‘๊ทผ ์ˆ˜์ค€์œผ๋กœ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์€
๊ทธ ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์Šˆํผํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธํ•จ.

- public์€ ์ฃผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์™ธ๋ถ€์™€ ์—ฐ๊ฒฐ๋  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋งŽ์ด ์‚ฌ์šฉํ•จ.

โ–ท internal
- ๋ชจ๋“  ์š”์†Œ์— ์•”๋ฌต์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๋””ํด๋“œ ์ ‘๊ทผ์ œ์–ด์ž์ž„.

- ์†Œ์ŠคํŒŒ์ผ์— ์†ํ•ด์žˆ๋Š” ๋ชจ๋“ˆ ์–ด๋””์—๋“  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์™ธ๋ถ€ ๋ชจ๋“ˆ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ.

โ–ท fileprivate
- ์†Œ์Šค ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ.

- ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ๊ฐ™์€ ํ•˜๋‚˜์˜ ์†Œ์Šค ํŒŒ์ผ์— ์ •์˜๋˜์–ด์žˆ๊ณ ,
fileprivate๋กœ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‘ ํด๋ž˜์Šค๋Š” ์„œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ.

โ–ท private
- ๊ฐ€์žฅ ์ œํ•œ์ ์ธ ์ ‘๊ทผ์ œ์–ด์ž์ž„.

- fileprivate์™€ ๋‹ฌ๋ฆฌ ๊ฐ™์€ ํŒŒ์ผ ์•ˆ์— ์žˆ์–ด๋„ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์ด๊ณ ,
private๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‘ ์š”์†Œ๋Š” ์„œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ.




 

728x90