[Swift๐ฆฉ] #9 ๊ตฌ์กฐ์ฒด vs ํด๋์ค
1. ๊ธฐ๋ฅ
๊ฐ๋ฅ | ๊ตฌ์กฐ์ฒด | ํด๋์ค |
---|---|---|
property | O | O |
method | O | O |
subscript | O | O |
init | O | O |
extension | O | O |
protocol ์ค์ | O | O |
inheritance | X | O |
type casting | X | O |
deinit | X | O |
์ฐธ์กฐ ์นด์ดํ | X | O |
2. ์ ์
struct Model {
var status: Int
var message: String
}
class ViewModel {
var model: Model
var observable: Observable<Int>
}
3. instance
let model = Model()
let viewModel = viewModel()
4. ํ๋กํผํฐ ์ ๊ทผ
.์ผ๋ก ์ ๊ทผ
model.status
viewModel.observable
viewModel.model.message
5. ์ด๊ธฐํ
๊ตฌ์กฐ์ฒด๋ ๋ฉค๋ฒ๋ณ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ด ์๋ ์์ฑ ๋์ง๋ง,
ํด๋์ค๋ ๊ทธ๋ ์ง ์์. ํ์ํ๋ฉด ์ง์ ์ ์ํด์ผํจ.
let model = Model(status: 404, message: "success")
6. Value vs Reference โญ๏ธโญ๏ธ
๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ๊ฐ ํ์
์ด๋ผ ์ฌ์ฉํ ๋ ๋ณต์ฌํด์ ์ฌ์ฉํ๋ค. (๊ธฐ์กด ๊ฐ ์ ์ง)
ํ์ง๋ง, ํด๋์ค๋ ์ฐธ์กฐ ํ์
์ด๋ผ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํด์ ์ฌ์ฉํ๋ค. (๊ธฐ์กด ๊ฐ๋ ๋ฐ๋)
C์ธ์ด์ ํฌ์ธํฐ๋ฅผ ์๊ฐํ๋ฉด ๋์ง๋ง, int * ์ฒ๋ผ ๋ฐ๋ก ํ์
์ด ๋๋์ง ์์. ๊ทธ๋ฅ ์์๋ ๋ณ์์ฒ๋ผ ์ ์ํ๋ฉด ๋๋ค.
+) Swift ์ value type ์ copy-on-write ์ด๋ค. ๊ฐ์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๊ฐ ๊ฐ์ด ๋ฐ๋๊ธฐ ์ง์ ์ ๋ณต์ฌํ๊ฒ ๋๋ค!!
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
ํด๋์ค ์๋ณ ์ฐ์ฐ์
== != ์ด ์๋๋ผ === !==
(js์์๋ ํ์
๊น์ง ๊ฐ์์ง ๋ด์ฃผ๋ ์ฐ์ฐ์์๋๋ฐ..)
์ง๋ฌธ
Struct ๊ฐ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ค๋ช ํ์์ค.
struct ๋ ๊ตฌ์กฐ์ฒด๋ก struct ์ด๋ฆ ํํ๋ก ์ฌ์ฉํ๋ค. ์์ ํ๋กํผํฐ์ ๋ฉ์๋, ์ด๊ธฐ์๋ฅผ ์ ์ํ ์ ์์ผ๋ฉฐ (+ extension, protocol, subscript)
์ฃผ๋ก ๋ชจ๋ธ์ ์ ์ํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ค.
+) ์ถ๊ฐ
- struct ๋ ๊ด๋ จ๋ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ (์บก์ํํด์) ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฌธ๋ฒ.
- ๊ฐํ์ ์ด๋ผ ์๋ก์ด ๋ณ์์ ํ ๋น ์, ๋ณต์ฌ๋์ด ์ฌ์ฉ๋๋ค.
- ํ์ง๋ง copy-on-write ๋ผ ์ค์ ๊ฐ์ ๋ณ๊ฒฝ์ด ์๊ธฐ ์ ๊น์ง๋ ๊ฐ์ ๊ฐ์ ์ฐธ์กฐํ๊ณ ์๋ค.
- ์์, deinit, type casting ์ ๋ถ๊ฐ๋ฅํ๋ค.
- ์๋ ๋ฉค๋ฒ๋ณ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ด ์ ๊ณต๋๋ค.
struct์ class์ enum์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ์์ค.
๊ฐํ์
struct ๋ ๊ตฌ์กฐ์ฒด๋ก, ํด๋น ํ์
์์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค. ์ด๊ธฐ์๋ ์๋ธ์คํฌ๋ฆฝํธ extension, protocol ๋ ์ฌ์ฉํ ์ ์๋ค.
enum ์ ์ด๊ฑฐํ์ผ๋ก, ํด๋น ํ์
์์ ๋๋์ด์ง๋ ์ผ์ด์ค๋ก ํํ๋๋ค.
์ฐธ์กฐ ํ์
class ๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค. struct ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ทํ์ง๋ง, ์ฐธ์กฐ ํ์
์ด๊ธฐ ๋๋ฌธ์ let ํค์๋๋ก ์ ์ธํ๋๋ผ๋ ์ธ์คํด์ค ์์ ์๋ ํ๋กํผํฐ๋ ๋ณ๊ฒฝํ ์ ์๊ณ , ํ๋์ ์ธ์คํด์ค์ ํ๋กํผํฐ๋ง ๋ฐ๊ฟ๋ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ์ ์ฒด๊ฐ ๋ค ๋ฐ๋๊ฒ ๋๋ค.
+) ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ํด์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ๋ค ์ธ ์ ์๊ณ , deinit ์ผ๋ก ๋ช ์์ ์ผ๋ก ํ๋กํผํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํด์ค ์ ์๋ค.
https://bbiguduk.gitbook.io/swift/language-guide-1/structures-and-classes
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Swift๐ฆฉ] #9 ๊ตฌ์กฐ์ฒด vs ํด๋์ค), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@ddosang/Swift-9-๊ตฌ์กฐ์ฒด-vs-ํด๋์ค์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค