๐ฅ ํค์๋
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- class
- struct
- protocol
- ์ ๊ทผ์ ์ด์
๐ฅ ์์ ์ง๋ฌธ์ง
- Class์ Struct์ ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Class์ Struct๋ ๋ ๋ค ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์บก์ํํ ์ ์๋ Swift์ ๊ธฐ๋ณธ ํ์
์
๋๋ค. ํ์ง๋ง ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค:
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: Struct๋ ๊ฐ ํ์ (Value Type)์ด๊ณ , Class๋ ์ฐธ์กฐ ํ์ (Reference Type)์ ๋๋ค. Struct๋ ๊ฐ์ ๋ณต์ฌํ๋ ๋ฐ๋ฉด, Class๋ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํ์ฌ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํฉ๋๋ค.
- ์์: Class๋ ์์์ ์ง์ํ์ง๋ง Struct๋ ์์์ ์ง์ํ์ง ์์ต๋๋ค.
- deinit: Class๋ ์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ ํธ์ถ๋๋ deinit ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, Struct๋ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์ฐธ์กฐ ์นด์ดํ : Class๋ ARC(Automatic Reference Counting)๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ง๋ง, Struct๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
- Class์ Struct๋ ๋ ๋ค ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์บก์ํํ ์ ์๋ Swift์ ๊ธฐ๋ณธ ํ์
์
๋๋ค. ํ์ง๋ง ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค:
- Class func์ static func์ ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- static func์ ์ ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉฐ, ์ด ๋ฉ์๋๋ ํ์ ๊ทธ ์์ฒด์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ์๋ธํด๋์ฑ ์ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- class func์ ํด๋์ค ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉฐ, ์๋ธํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด ๋ฉ์๋๋ ํด๋์ค ํ์ ์ ์ํ๋ฉฐ, ํด๋น ํด๋์ค ๋๋ ์๋ธํด๋์ค์์ ํธ์ถ๋ ์ ์์ต๋๋ค.
- Call by Reference์ Call by Value์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Call by Value: ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ ๋ ์ธ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋๋ค. ์ ๋ฌ๋ ๊ฐ์ด ํจ์ ๋ด์์ ๋ณ๊ฒฝ๋๋๋ผ๋ ์๋์ ๊ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. Swift์์ Struct์ Enum์ ๊ธฐ๋ณธ์ ์ผ๋ก Call by Value๋ก ๋์ํฉ๋๋ค.
- Call by Reference: ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ ๋ ์ธ์์ ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๊ฒฝ์ฐ, ํจ์ ๋ด์์ ์ธ์์ ๋ณ๊ฒฝ์ ์๋์ ๋ฐ์ดํฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. Swift์์ Class๋ ๊ธฐ๋ณธ์ ์ผ๋ก Call by Reference๋ก ๋์ํฉ๋๋ค.
- Mutating ํค์๋์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- mutating ํค์๋๋ Struct๋ Enum์ ๋ฉ์๋๊ฐ ์ธ์คํด์ค์ ๊ฐ์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. Struct์ Enum์ ๊ฐ ํ์ ์ด๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์คํด์ค์ ๋ด๋ถ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฉ์๋์ mutating ํค์๋๋ฅผ ๋ถ์ด๋ฉด ํด๋น ๋ฉ์๋์์ ์ธ์คํด์ค์ ์์ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋ฉ๋๋ค.
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- **๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)**์ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋์(๋ฉ์๋)์ ๊ฐ์ฒด๋ก ๋ฌถ์ด ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๊ณ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค. OOP๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ๋ณต์กํ ์์คํ ์ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ค๋๋ค. OOP์ ํต์ฌ ๊ฐ๋ ์ผ๋ก๋ ์บก์ํ, ์์, ๋คํ์ฑ, ์ถ์ํ ๋ฑ์ด ์์ต๋๋ค.
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง์ ๋ํด์ ์๋๋งํผ ์ค๋ช
ํด์ฃผ์ธ์.
- ์บก์ํ: ๋ฐ์ดํฐ์ ๋ฉ์๋๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ๋ฌถ๊ณ , ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ๋ณดํธํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ , ๊ฐ์ฒด ๋ด๋ถ์ ๊ตฌํ์ ์จ๊ธธ ์ ์๊ฒ ํฉ๋๋ค.
- ์์: ๊ธฐ์กด ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์๋ก์ด ํด๋์ค์์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํ๋ฉฐ, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์์ ํ ์ ์์ต๋๋ค.
- ๋คํ์ฑ: ๊ฐ์ ๋ฉ์๋๊ฐ ์๋ก ๋ค๋ฅธ ํด๋์ค์์ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์๋๋ก ํ๋ ๋ฅ๋ ฅ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ์ฌ๋ฌ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ๋์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์ถ์ํ: ๊ฐ์ฒด์ ๋ณต์กํ ๋ด๋ถ ๊ตฌํ์ ์จ๊ธฐ๊ณ , ํ์ํ ์ธํฐํ์ด์ค๋ง์ ์ธ๋ถ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์๊ณ , ํ์ํ ๊ธฐ๋ฅ๋ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์์์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- ์์์ ๊ธฐ์กด ํด๋์ค(์ํผํด๋์ค)์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์๋ก์ด ํด๋์ค(์๋ธํด๋์ค)์์ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ํ ๊ฐ๋ ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ณ , ์๋ธํด๋์ค๋ ์ํผํด๋์ค์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค. Swift์์๋ ํด๋์ค์์๋ง ์์์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ์์์ ์ง์ํ์ง ์์ต๋๋ค.
- Protocol์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Protocol์ ํน์ ๊ธฐ๋ฅ์ด๋ ์์ฑ์ ๋ฐ๋์ ๊ตฌํํ๋๋ก ๊ฐ์ ํ๋ ์ฒญ์ฌ์ง ์ญํ ์ ํฉ๋๋ค. Swift์ ํ๋กํ ์ฝ์ ๋ค๋ฅธ ์ธ์ด์ ์ธํฐํ์ด์ค์ ์ ์ฌํ๋ฉฐ, ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ๋ชจ๋ ํ๋กํ ์ฝ์ ์ฑํํ์ฌ ๊ทธ ์๊ตฌ์ฌํญ์ ๊ตฌํํ ์ ์์ต๋๋ค. ํ๋กํ ์ฝ์ ํ์ ๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ๋คํ์ฑ์ ์ง์ํ๋ฉฐ, ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- Codable์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Codable์ Swift์์ JSON๊ณผ ๊ฐ์ ์ธ๋ถ ๋ฐ์ดํฐ ํ์๊ณผ Swift ๊ฐ์ฒด ๊ฐ์ ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ์ ๊ฐํธํ๊ฒ ํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋กํ ์ฝ์ ๋๋ค. Codable์ Encodable๊ณผ Decodable ํ๋กํ ์ฝ์ ํฉ์น ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์ง๋ ฌํํ๊ฑฐ๋, ์ญ์ง๋ ฌํํ์ฌ ๋คํธ์ํฌ ํต์ ์ด๋ ๋ฐ์ดํฐ ์ ์ฅ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- Dictionary๋ฅผ ์ฌ์ฉํด๋ณด์
จ๋์?
- ๋ค, Dictionary๋ฅผ ์ฌ์ฉํด๋ดค์ต๋๋ค. Dictionary๋ ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, ๊ฐ ํค๋ ๊ณ ์ ํด์ผ ํฉ๋๋ค. Swift์์ Dictionary๋ Dictionary<Key, Value> ๋๋ [Key: Value] ํํ๋ก ํํ๋ฉ๋๋ค.
- Hashable์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Hashable์ Swift์์ ํด์ ๊ฐ์ ๊ณ์ฐํ ์ ์๋ ํ์ ์ ์ ์ํ๋ ํ๋กํ ์ฝ์ ๋๋ค. Dictionary์ ํค๋ก ์ฌ์ฉ๋๋ ํ์ ์ ๋ฐ๋์ Hashable์ ์ค์ํด์ผ ํฉ๋๋ค. ์ด๋ ํค์ ๊ณ ์ ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ํด์ ๊ฐ์ ์ฌ์ฉํ์ฌ Dictionary์์ ํญ๋ชฉ์ ๋น ๋ฅด๊ฒ ์ฐพ๊ฑฐ๋ ์ ์ฅํ ์ ์์ต๋๋ค.
- Swift ์ ๊ทผ์ ์ด์์ ๋ํด์ ์๋๋งํผ ์ค๋ช
ํด์ฃผ์ธ์.
- Swift์๋ ๋ค์ฏ ๊ฐ์ง์ ์ ๊ทผ ์ ์ด์๊ฐ ์์ต๋๋ค:
- open: ํด๋์ค๋ ๋ฉค๋ฒ๊ฐ ๋ชจ๋ ์ธ๋ถ์์ ์์ ๋ฐ ์ฌ์ ์๋ ์ ์์ต๋๋ค. ์ฃผ๋ก ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- public: ๋ชจ๋ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์์ง๋ง, ์์์ด๋ ์ฌ์ ์๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- internal: ๋์ผ ๋ชจ๋ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค. ๊ธฐ๋ณธ ์ ๊ทผ ์ ์ด ์์ค์ผ๋ก, ๋ณ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด internal๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- fileprivate: ๋์ผ ํ์ผ ๋ด์์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค.
- private: ๋์ผ ๋ฒ์(ํด๋์ค, ๊ตฌ์กฐ์ฒด ๋ฑ) ๋ด์์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค.
- Swift์๋ ๋ค์ฏ ๊ฐ์ง์ ์ ๊ทผ ์ ์ด์๊ฐ ์์ต๋๋ค:
- Swift Default ์ ๊ทผ์ ์ด์๋ ๋ฌด์์ธ์ง ์ค๋ช
ํด์ฃผ์ธ์.
- Swift์ ๊ธฐ๋ณธ ์ ๊ทผ ์ ์ด์๋ internal์ ๋๋ค. ๋ณ๋๋ก ์ ๊ทผ ์ ์ด์๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, ํด๋น ์ฝ๋์ ์ ๊ทผ ์์ค์ internal๋ก ๊ฐ์ฃผ๋๋ฉฐ, ๋์ผ ๋ชจ๋ ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ์ํ
'TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 2024. 08. 23 (0) | 2024.08.23 |
---|---|
[TIL] 2024. 08. 22 (0) | 2024.08.22 |
[TIL] 2024. 08. 20 (0) | 2024.08.21 |
[TIL] 2024. 08. 19 (0) | 2024.08.19 |
[TIL] 2024. 08. 16 (0) | 2024.08.19 |