<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๋ก ์ ์ธ๋์ด ์๋ค๋ฉด ๋ ์์๋ ์๋ก ์ ๊ทผํ ์ ์์.
'iOS ์ฑ ๊ฐ๋ฐ ์ข ํฉ๋ฐ > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ ์ข ํฉ๋ฐ ์ฌํ_๊ฐ์ธ๊ณผ์ _์ผ๊ตฌ๊ฒ์๋ง๋ค๊ธฐ(Lv1~2) (2) | 2024.03.15 |
---|---|
3์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ์ฌํ_(2์ผ์ฐจ)_ํด๋ก์ & ๊ณ ์ฐจํจ์ (4) | 2024.03.12 |
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ ๊ธฐ์ด ๊ณผ์ _๊ณ์ฐ๊ธฐ ๋ง๋ค๊ธฐ (0) | 2024.03.07 |
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(3์ผ์ฐจ) (0) | 2024.03.06 |
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(2์ผ์ฐจ) (4) | 2024.03.05 |