[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λ 볡μ¬λ³Έμλ§ μ λ°μ΄νΈλκ³ , ν΄λμ€ μΈμ€ν΄μ€λ μ°Έμ‘°κ°μ΄ 볡μ¬λμκΈ° λλ¬Έμ μμͺ½ μΈμ€ν΄μ€μ λͺ¨λ μ λ°μ΄νΈλ©λλ€.
μ ν·κ°λ¦°λ€! μ 리!
κ°λ¨νκ² μ 리νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
- ν΄λμ€ λ΄λΆμ ꡬ쑰체 μΈμ€ν΄μ€κ° λ©€λ²λ‘ μμ λ → λ³μμ ν΄λμ€ μΈμ€ν΄μ€ ν λΉ μ κ°μ ꡬ쑰체 μΈμ€ν΄μ€κ° λ°λΌκ°λ€.
- ꡬ쑰체 λ΄λΆμ ν΄λμ€ μΈμ€ν΄μ€κ° λ©€λ²λ‘ μμ λ → λ³μμ ꡬ쑰체 μΈμ€ν΄μ€ ν λΉ μ ν΄λμ€ μΈμ€ν΄μ€μ μ°Έμ‘° κ°μ΄ λ°λΌκ°λ€.