[Swift] Struct vs. Class (2), Struct์์ ์ฐธ์กฐ ํ์ , Class ์์ ๊ฐ ํ์ ๋ณ์๊ฐ ์์ ๋
๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ , ํด๋์ค๋ ์ฐธ์กฐ ํ์ !
์ด์ ํฌ์คํธ์์ ๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ , ํด๋์ค๋ ์ฐธ์กฐ ํ์ ์ด๋ผ๋ ๊ฒ์ ๊ณต๋ถํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๊ตฌ์กฐ์ฒด ์์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ทธ๋ฆฌ๊ณ ํด๋์ค ์์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์ด๋จ๊น์?
ํด๋์ค ์์ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ
์ฝ๋๋ก ์์ฑํด์ ํ์ธํด๋ด ์๋ค.
import Foundation struct ValueType { var number = 2 } class ReferenceType { var number = 1 var structInstance = ValueType() } let classInstance = ReferenceType() let classInstanceCopy = classInstance classInstanceCopy.number = 0 classInstanceCopy.structInstance.number = 0 print(classInstanceCopy.number) print(classInstanceCopy.structInstance.number) print() print(classInstance.number) print(classInstance.structInstance.number)
๊ตฌ์กฐ์ฒด์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ํ๋ ์ด๊ธฐํํด์ฃผ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํด๋์ค์ ๊ตฌ์กฐ์ฒด๋ number๋ผ๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
0 // classInstance.number 0 // classInstance.structInstance.number 0 // classInstanceCopy.number 0 // classInstanceCopy.structInstance.number
์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋ ํด๋์ค ์ธ์คํด์ค์ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด, ๊ธฐ์กด ํด๋์ค ์ธ์คํด์ค์ ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ ๋ณ์๋ ํจ๊ป ๋ณ๊ฒฝ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ number ๋ฉค๋ฒ ๋ณ์๋ ํจ๊ป ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๋ ๊ฒ ๋์ํ๋ ์ด์ ๋ struct๋ ๊ฐ ํ์ ์ด์ง๋ง RefereceType ์ธ์คํด์ค๊ฐ ํ์ ํฌํจ๋์ด์ ์ฐธ์กฐ ํ์ ์ธ ReferenceType ์ธ์คํด์ค๊ฐ ํด์ ๋ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ํจ๊ป ๋จ์์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฆ, ์ฐธ์กฐ ํ์ ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ ๋๋ ์ฐธ์กฐ ๊ฐ๋ง ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ๊ฐ ํ์ ์ธ์คํด์ค๋ ์๋ก ๋ณต์ฌ๋์ง ์๊ณ ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ค! ์๊ฐํด๋ณด๋ฉด ๋๋ฌด๋ ๋น์ฐํ์ฃ ? ์ฐธ์กฐ ํ์ ์ธ์คํด์ค๋ฅผ ์๋ก ์ด๋๊ฐ์ ํ ๋นํ๋ค๊ณ ํด์ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ฑด ์๋๋๊น์.
๊ตฌ์กฐ์ฒด ์์ ํด๋์ค ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ
๊ทธ๋ผ ๋ฐ๋๋ก ๊ตฌ์กฐ์ฒด ์์ ํด๋์ค ์ธ์คํด์ค๊ฐ ์์ ๋๋ ์ด๋จ๊น์? ์ด๋ฒ์๋ ์ฝ๋๋ก ํ ๋ฒ ์์๋ณผ๊น์?
import Foundation struct ValueType { var number = 2 var classInstance = ReferenceType() } class ReferenceType { var number = 1 } var structInstance = ValueType() var structInstanceCopy = structInstance structInstanceCopy.number = 0 structInstanceCopy.classInstance.number = 0 print(structInstance.number) print(structInstance.classInstance.number) print() print(structInstanceCopy.number) print(structInstanceCopy.classInstance.number)
์์ ์์ ์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๊ธฐ์ค ์ธ์คํด์ค๋ง ๊ตฌ์กฐ์ฒด๋ก ๋ฐ๊ฟ์ฃผ์์ต๋๋ค.
์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
2 // structInstance.number 0 // structInstance.classInstance.number 0 // structInstanceCopy.number 0 // structInstanceCopy.classInstance.number
ํด๋์ค ๋ด๋ถ์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๊ฐ ์์ ๋์๋ ์กฐ๊ธ ๋ค๋ฅด์ฃ ?
๋จผ์ , ๊ฐ ํ์ ํ ๋น์ด ์ผ์ด๋ฌ๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๊ฐ ์๋ก์ด ๋ณ์์ ๋ณต์ฌ๋ฉ๋๋ค. ์ด๋, ๋ด๋ถ์ ์๋ ๊ฐ ํ์ ๋ฉค๋ฒ ๋ณ์๋ ๋ณ๊ฐ์ ๋ณ์๋ก ๋ณต์ฌ๋๊ณ , ์ฐธ์กฐ ํ์ ํด๋์ค ์ธ์คํด์ค๋ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ ์ธ์คํด์ค์ ๋ฉค๋ฒ ๋ณ์์ธ number๋ ๋ณต์ฌ๋ณธ์๋ง ์ ๋ฐ์ดํธ๋๊ณ , ํด๋์ค ์ธ์คํด์ค๋ ์ฐธ์กฐ๊ฐ์ด ๋ณต์ฌ๋์๊ธฐ ๋๋ฌธ์ ์์ชฝ ์ธ์คํด์ค์ ๋ชจ๋ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
์ ํท๊ฐ๋ฆฐ๋ค! ์ ๋ฆฌ!
๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํด๋์ค ๋ด๋ถ์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๊ฐ ๋ฉค๋ฒ๋ก ์์ ๋ โ ๋ณ์์ ํด๋์ค ์ธ์คํด์ค ํ ๋น ์ ๊ฐ์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๊ฐ ๋ฐ๋ผ๊ฐ๋ค.
- ๊ตฌ์กฐ์ฒด ๋ด๋ถ์ ํด๋์ค ์ธ์คํด์ค๊ฐ ๋ฉค๋ฒ๋ก ์์ ๋ โ ๋ณ์์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค ํ ๋น ์ ํด๋์ค ์ธ์คํด์ค์ ์ฐธ์กฐ ๊ฐ์ด ๋ฐ๋ผ๊ฐ๋ค.
'๐ ์์ด-์ค-์์ค > ๐ค ์ค์ํํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ค์ํํธ์ ๊ณ ์ฐจํจ์๋ค(High Order Functions) (0) | 2021.10.10 |
---|---|
[Swift] Swift์ ์ฐ์ฒด๊ตญ, NotificationCenter (0) | 2021.09.19 |
[Swift] Struct vs. Class (1), ์ธ์ ๋ญ ์จ์ผํ ๊น? (0) | 2021.08.25 |
[Swift] FileManager๋ก ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (0) | 2021.08.22 |
[Swift] ๋ฌธ์์ด์ ์ซ์๋ง ์๋์ง ํ์ธํ๊ธฐ (0) | 2021.07.18 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.