[Swift] Struct vs. Class (1), ์ธ์ ๋ญ ์จ์ผํ ๊น?
๊ตฌ์กฐ์ฒด๋ ํด๋์ค๋.. ๊ณ ๊ฒ์ด ๋ฌธ์ ๋ก๋ค..
์๋ก์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ฑฐ๋ ํ์ ์ ๋ง๋ค ๋, ๊ตฌ์กฐ์ฒด์ ํด๋์ค ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ์ง ๊ณ ๋ฏผํ๊ณค ํฉ๋๋ค. ์ค๋์ ๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ์ฐจ์ด์ ๋ํด์ ์์๋ณด๊ณ ์ด๋ค ์ํฉ์ ์ด๋ค ๋ฐฉ์์ ์ ํํ๋ฉด ์ข์์ง ๊ณ ๋ฏผํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ ํ์ vs. ์ฐธ์กฐ ํ์
๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ์ฐจ์ด ์ค ๊ฐ์ฅ ๋๋๋ฌ์ง๋ ๊ฒ์ ๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ , ํด๋์ค๋ ์ฐธ์กฐ ํ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๋ ๋ณ์์ ๋์ ๋๊ฑฐ๋ ๋ค๋ฅธ ํจ์๋ก ์ ๋ฌ๋ ๋, ๋ฉค๋ฒ๋ค์ ๊ฐ์ด ๊ทธ๋๋ก ๋ณต์ฌ๋ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ , ํด๋์ค๋ ํ์ฌ ์ธ์คํด์ค์ ์ฐธ์กฐ ๊ฐ์ด ์ ๋ฌ๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ , ํด๋์ค๋ ์ฐธ์กฐ ํ์ ์ด๋ผ๋ ๋ง์ ๊ณง ๋ ํ์ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ก ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ตฌ์กฐ์ฒด - ์คํ ์์ญ
๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์, ๋ฉ๋ชจ๋ฆฌ์ ์คํ ์์ญ์ ์ฌ์ฉํฉ๋๋ค. ์คํ ์์ญ์ ๊ฐ ์ค๋ ๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Thread-Safe ํ๋ค๋ ํน์ง์ด ์์ต๋๋ค. ๋ํ ์คํ ์์ญ์ ์คํ ํฌ์ธํฐ๋ง ์ด๋์ํค๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ๋ช ๋ น์ผ๋ก ํ ๋น๊ณผ ํด์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ ํ์์ ํ ๋นํ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํด์ฃผ์ง ์์๋ ๋ฉ๋๋ค. ์ด๋ ์ด์์ฒด์ ๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ ์์ญ์ ๋ฐ๋ก ๊ณ์ฐํ์ง ์์๋ ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
ํด๋์ค - ํ ์์ญ
ํด๋์ค์ ์ธ์คํด์ค๋ ํ ์์ญ์ ์ ์ฅ๋ฉ๋๋ค. ํ ์์ญ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ ์ปดํ์ผ ํ์์ด ์๋ ๋ฐํ์์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐํ์์ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ ์๊ตฌํฉ๋๋ค. ๋ํ ํ ์์ญ์ ํ ํ๋ก์ธ์ค์ ์ค๋ ๋๋ค์ด ํจ๊ป ๊ณต์ ํ๋ ์์ญ์ด๊ธฐ ๋๋ฌธ์ Thread-Safe์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
์ ๋ด์ฉ์ ๊ธฐ๋ฐํ์ฌ ์๊ฐํด๋ณด๋ฉด, ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธก๋ฉด์์ ํด๋์ค์ ๋นํด ๋ ์ ๋ฆฌํ๊ณ , ๋ ๋น ๋ฅธ ์๋๋ฅผ ๊ฐ์ง๋๋ค.
Copy-on-write
๊ตฌ์กฐ์ฒด์ ๊ฐ์ ๊ฐ ํ์ ๋ค์ ๊ฐ Copy-on-write๋ผ๋ ์ต์ ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ชจ๋ ๊ฐ ํ์ ๋ค์ด Copy-on-write๋ฅผ ์ฌ์ฉํ์ง๋ ์์ง๋ง, ๋ฐฐ์ด, ๋์ ๋๋ฆฌ์ ๊ฐ์ ๊ตฌ์กฐ์ฒด๋ก ์ ์๋ ์ปฌ๋ ์ ๋ค์ ์ด ์ต์ ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Copy-on-write๋ ๊ฐ ํ์ ๋ณ์๋ฅผ ์๋ก์ด ๋ณ์์ ํ ๋นํ ๋, ์ฆ์ ์๋ก์ด ๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ๊ณ์ ๊ฐ๋ฆฌํค๋ค๊ฐ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒผ์ ๋ ๋ณต์ฌ๋ณธ์ ๋ง๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฉ์น๊ฐ ํฐ, ํนํ ๋ด๋ถ์ ์ฐธ์กฐ ํ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ํฌํจํ๋ ๊ตฌ์กฐ์ฒด์ ๋ณต์ฌ๋ ๋ ํผ๋ฐ์ค ์นด์ดํ ๊ณผ ๊ฐ์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํต๋๋ค. ๋ฐ๋ผ์ ์ต์ ํ๋ฅผ ์ํด ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ , ์๋ก์ด ๋ณ๊ฒฝ์ด ์๊ฒผ์ ๋๋ง ์์ ํ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ์ต์ ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
import Foundation
func compareValueTypeInstance(of arr1:[Int], with arr2:[Int]) {
if arr1 == arr2 {
print("same instance")
} else {
print("different istance")
}
}
let arr1 = [1, 2, 3, 4]
var arr2 = arr1
compareValueTypeInstance(of: arr1, with: arr2) // "same instance"
arr2.append(5)
compareValueTypeInstance(of: arr1, with: arr2) // "different istance"
์์
ํด๋์ค๋ ์์์ด ๊ฐ๋ฅํ์ง๋ง ๊ตฌ์กฐ์ฒด๋ ์์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ตฌ์กฐ์ฒด์์ Protocol์ ์ฑํํด์ ๊ธฐ๋ฅ์ ํ์ฅํ ์๋ ์๋๋ก ํฉ๋๋ค. ์ฌ์ค ์ค์ํํธ๋ ํ๋กํ ์ฝ์ ํตํ ์์์ ๊ถ์ฅํ๊ณ ์์ด์.
์ธ์ ๋ญ ์ธ๊น?
๊ทธ๋ผ ์ธ์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฐ๊ณ , ์ธ์ ํด๋์ค๋ฅผ ์จ์ผ ํ ๊น์? ๊ณต์๋ฌธ์์์ ์น์ ํ๊ฒ ์๋ดํด์ฃผ๊ณ ์์ต๋๋ค.
๋ํดํธ๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ธ์.
๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ ์ค์ํํธ์ ๊ตฌ์กฐ์ฒด๋ ํด๋์ค์์ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ์์๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฐ์ฐ/์ ์ฅ ํ๋กํผํฐ, ๋ฉ์๋, ํ๋กํ ์ฝ ์ฑํ ๋ฑ ๋ค๋ฅธ ์ธ์ด์์๋ ํด๋์ค์์๋ง ์ฌ์ฉํ ์ ์์ง๋ง ์ค์ํํธ์์๋ ๊ตฌ์กฐ์ฒด์์๋ ์ง์ํฉ๋๋ค. ๋ํ ์ค์ํํธ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฐ์ดํฐ๋ค ์ญ์๋ ๋๋ถ๋ถ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํด ๊ตฌํ๋์ด ์์ต๋๋ค.
Objective-C์ ์ํธ ์ด์ฉ(Interoperability) ํด์ผ ํ ๋๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ธ์.
Objective-C์์ ์ง์ํ๋ API๋ฅผ ์ฌ์ฉํด์ผ ํ ๋๋ Objective-C์ ํด๋์ค๋ฅผ ์์๋ฐ์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ณ ์ ํ ๊ฐ์ ์ ์ดํด์ผ ํ ๋๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ธ์.
ํด๋์ค๋ ์ฐธ์กฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์ค์ํํธ์์ ๊ณ ์ ํ ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฐธ์กฐ ํ์ ์ ์ฌ์ฉํ๋ฉด ์ฑ์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๋๋ผ๋ ํ ์์ญ์์ ์ ์ฉํ ์์ ์ด ๋ค๋ฅธ ์์ญ์์๋ ์ ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก ํ์ผ ๊ด๋ฆฌ๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ๊ณผ ๊ฐ์ ์์ ์ ๋ค๋ฃฐ ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ณ ์ ํ ๊ฐ์ ์ ์ดํ์ง ์์ ๋๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ธ์.
์ธ๋ถ์์ ์ด๋ฏธ ๊ณ ์ ์ฑ์ ์ฒ๋ฆฌํ๊ณ ์๋ ๊ฒฝ์ฐ์๋ ์ฑ ๋ด์์ ๋ฐ์ดํฐ์ ๊ณ ์ ์ฑ์ ๊ด๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค.
์์๊ณผ ๊ณต์ ์์ฑ์ ๋ชจ๋ธ๋ง ํ๊ณ ์ถ์ ๋๋ ๊ตฌ์กฐ์ฒด์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ธ์.
๊ตฌ์กฐ์ฒด๋ ํด๋์ค์ฒ๋ผ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ํ ์ ์์ต๋๋ค. ํ์ง๋ง ํ๋กํ ์ฝ์ ํตํด ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ํํํ ์ ์์ต๋๋ค. ํด๋์ค๋ ํด๋์ค๋ผ๋ฆฌ๋ง ์์์ ๋ง๋ค ์ ์๋ ๋ฐ๋ฉด์ ํ๋กํ ์ฝ์ ํด๋์ค, ์ด๊ฑฐํ, ๊ตฌ์กฐ์ฒด๊ฐ ๋ชจ๋ ์ฑํํ๋๋ก ํ ์ ์์ต๋๋ค.
'๐ ์์ด-์ค-์์ค > ๐ค ์ค์ํํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Swift์ ์ฐ์ฒด๊ตญ, NotificationCenter (0) | 2021.09.19 |
---|---|
[Swift] Struct vs. Class (2), Struct์์ ์ฐธ์กฐ ํ์ , Class ์์ ๊ฐ ํ์ ๋ณ์๊ฐ ์์ ๋ (0) | 2021.08.26 |
[Swift] FileManager๋ก ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (0) | 2021.08.22 |
[Swift] ๋ฌธ์์ด์ ์ซ์๋ง ์๋์ง ํ์ธํ๊ธฐ (0) | 2021.07.18 |
[Swift] Int ๋ฐ์ดํฐ๋ฅผ Character๋ก ํ๋ณํํ๊ธฐ (0) | 2021.07.17 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote