์๋ ํ์ธ์~
์ค๋์ ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค : )
Class์ Struct
Class์ Struct๋ ๋ชจ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํ์ ์ด๋ฉฐ, ๊ฐ๊ฐ์ ํน์ง๊ณผ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
Class์ Struct์ ๊ณตํต์ , ์ฐจ์ด์ , ์ด๋ ํ ์ํฉ์์ class๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง, struct๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง ์ ๋ฆฌํ๊ฒ ์ต๋๋ค.
Class
- Class๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ค ํ๋์ ๋๋ค. Class๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ์์ฑ์ ๊ฐ์ง๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ํด๋น ๊ฐ์ฒด์ ๋์์ ์ ์ํ ์ ์์ต๋๋ค. Class๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์, ์บก์ํ, ๋คํ์ฑ ๋ฑ์ ํน์ง์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Struct
- Struct๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Struct๋ Class์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, Struct๋ ๊ฐ ํ์ (Value Type)์ด๋ฉฐ Class๋ ์ฐธ์กฐ ํ์ (Reference Type)์ ๋๋ค. Struct๋ ํด๋์ค์๋ ๋ฌ๋ฆฌ ์์์ ์ง์ํ์ง ์์ต๋๋ค.
Class์ Struct์ ๊ณตํต์
- ์์ฑ(Property)์ ๊ฐ์ง ์ ์์ต๋๋ค.
- ํจ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์ด๊ธฐํ(Initialization)๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ํ๋กํ ์ฝ(Protocol)์ ์ค์ํ ์ ์์ต๋๋ค.
Class์ Struct์ ์ฐจ์ด์
- Class๋ ์ฐธ์กฐ ํ์ (Reference Type)์ด๋ฉฐ, Struct๋ ๊ฐ ํ์ (Value Type)์ ๋๋ค.
- Class๋ ์์์ ์ง์ํ์ง๋ง Struct๋ ์์์ ์ง์ํ์ง ์์ต๋๋ค.
- Class๋ ์ฐธ์กฐ๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ๊ณ , ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ง ์์ต๋๋ค. Struct๋ ๋ณต์ฌ๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ๋ฉฐ, ๋ณต์ฌ๋ณธ์ ๋ง๋ญ๋๋ค.
์ด๋ ํ ์ํฉ์์ Class๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง, Struct๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง?
Class์ Struct๋ฅผ ์ฌ์ฉํ ๋, ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๊ฐ๊ฐ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Class
- ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ๊ณต์ ํด์ผ ํ ๋
- ๋ค๋ฅธ ๊ฐ์ฒด์์ ๊ด๊ณ๋ฅผ ์ค์ ํด์ผ ํ ๋
- ์์์ ์ง์ํ ๋
Struct
- ๊ฐ๋จํ ๊ฐ ํ์ ์ ์ฌ์ฉํ ๋
- ์์์ด ํ์ํ์ง ์์ ๋
- ๋ณต์ฌ๋ฅผ ํตํด ์ ๋ฌํ๊ณ ์ถ์ ๋
์๋ฅผ ๋ค์ด, ์๋์ฐจ๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์๋์ฐจ๋ ๋ชจ๋ธ๋ช , ์์, ์ต๋ ์๋ ๋ฑ์ ์์ฑ์ ๊ฐ์ง๋ฉฐ, ์ด์ ์๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๊ด๊ณ๋ฅผ ๋งบ์ ์ ์์ต๋๋ค.
struct Driver {
var name: String
var age: Int
}
// ์ด์ ์์ ์๋์ฐจ์ ๊ด๊ณ
class Car {
var model: String
var color: String
var maxSpeed: Int
var driver: Driver?
init(model: String, color: String, maxSpeed: Int) {
self.model = model
self.color = color
self.maxSpeed = maxSpeed
}
}
var driver = Driver(name: "๊ฒฝํธ", age: 20)
var car = Car(model: "JEEP", color: "Black", maxSpeed: 200)
car.driver = driver
์ด๋, ์๋์ฐจ๋ Class๋ก ๊ตฌํํ๊ณ ์ด์ ์๋ Struct๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค.
์๋์ฐจ๋ฅผ Class๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ ํฉํ ์ด์ ๋, ์๋์ฐจ๋ ๋ณต์กํ ๋์์ ์ํํ๊ณ ์ฌ๋ฌ ๊ฐ์ ์์ฑ์ ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ์์ ํ๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด๋ค์๊ฒ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ฐจ์ ์์์ ๋ณ๊ฒฝํ๋ฉด, ํด๋น ์๋์ฐจ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์๋ ์๋น์ค์ผํฐ์์ ๋ชจ๋ ๋ณ๊ฒฝ๋ ์์์ ํ์ธํ ์ ์์ต๋๋ค. ๋ํ, ์๋์ฐจ ์ ๋ณด๋ ์์ฃผ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์ ๊ณ , ๊ฐ์ฒด ๊ฐ ์ฐธ์กฐ๊ฐ ๋ง์ด ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก Class๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค.
๋ฐ๋ฉด์ ์ด์ ์๋ ๋จ์ํ ์ด๋ฆ, ๋์ด, ์ด์ ํ๋ ์๋์ฐจ ์ ๋ณด๋ง์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ์์ ํ๋๋ผ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์๊ฒ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ ํ์ ์ธ Struct๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค. ๋ํ, ์ด์ ์ ์ ๋ณด๋ ์์ฃผ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ๊ฐ ํ์ ์ธ Struct๋ก ๊ตฌํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๋ณต์ฌ๊ฐ ์ ๊ฒ ์ผ์ด๋๋ฏ๋ก ์ฑ๋ฅ์ ์ผ๋ก ์ด์ ์ด ์์ต๋๋ค.
Class ์ฌ์ฉ์ ์ฃผ์์ฌํญ
- ์ฐธ์กฐ(Reference)๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, weak, unowned์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฐฉ์งํด์ผ ํฉ๋๋ค.
- Strong Reference Cycle์ ๋ฐฉ์งํด์ผ ํฉ๋๋ค. ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์๋ก ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ Strong Reference Cycle์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ weak ๋๋ unowned๋ก ์ ์ธ๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, closure์์ [weak self]๋ฅผ ์ฌ์ฉํ์ฌ Strong Reference Cycle์ ๋ฐฉ์งํด์ผ ํฉ๋๋ค.
ARC์ ๋ํด์ ์ ์ด๋๋ ํฌ์คํ ์ ๋๋ค. ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์กฐ๊ธ ๋ ์์ธํ๊ฒ ๋ฏ์ด๋ณด๊ณ ๋ด์ฉ์ ๋ง์ด ์ถ๊ฐํด์ผ๊ฒ ๋ค์.
์ค๋์ ์ฌ๊ธฐ๊น์ง ์ ๋ฆฌํ๊ฒ ์ต๋๋ค : )
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป ๐๐ป
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Extension์ ๋ํด์ ์์๋ณด์. (1) | 2023.04.13 |
---|---|
[Swift] Property(ํ๋กํผํฐ)์ ๋ํด์ ์์๋ณด์. (0) | 2023.04.08 |
[Swift] Delegate Pattern(๋๋ฆฌ๊ฒ์ดํธ ํจํด)์ ๋ํด์ (0) | 2023.04.04 |
[Swift] Protocol(ํ๋กํ ์ฝ)์ ๋ํด์ (0) | 2023.04.02 |
[Swift] Copy on write(COW)์ ๋ํด์ (0) | 2023.03.30 |