-
(Swift) 클래스,구조체/ 열거형 차이Programing Language/Swift 2019. 10. 15. 22:40728x90반응형
- 예시 코드
struct ValueType { var property = 1 } class ReferenceType { var property = 1 } // 첫 번째 구조체 인스턴스 let firstStructInstance = ValueType() // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사 var secondStructInstance = firstStructInstance // 두 번째 구조체 인스턴스 프로퍼티 값 수정 secondStructInstance.property = 2 // 두 번째 구조체 인스턴스는 첫 번째 구조체를 똑같이 복사한 // 별도의 인스턴스이기 때문에 // 두 번째 구조체 인스턴스의 프로퍼티 값을 변경해도 // 첫 번째 구조체 인스턴스의 프로퍼티 값에는 영향이 없음 print("first struct instance property : \(firstStructInstance.property)") // 1 print("second struct instance property : \(secondStructInstance.property)") // 2 // 클래스 인스턴스 생성 후 첫 번째 참조 생성 let firstClassReference = ReferenceType() // 두 번째 참조 변수에 첫 번째 참조 할당 let secondClassReference = firstClassReference secondClassReference.property = 2 // 두 번째 클래스 참조는 첫 번째 클래스 인스턴스를 참조하기 때문에 // 두 번째 참조를 통해 인스턴스의 프로퍼티 값을 변경하면 // 첫 번째 클래스 인스턴스의 프로퍼티 값을 변경하게 됨 print("first class reference property : \(firstClassReference.property)") // 2 print("second class reference property : \(secondClassReference.property)") // 2
변수에 구조체를 넣고 인스터스화 하면 그 구조체 안에 있는 값은 복사가 된다. 그렇기에
var firstStructInstance = ValueType()
// 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사
var secondStructInstance = firstStructInstance
// 두 번째 구조체 인스턴스 프로퍼티 값 수정
secondStructInstance.property = 2
를 변경하더라도 firstStructInstance.property의 값은 그대로 1이다.
반면에 변수에 클래스를 넣고 인스터스화 하면 그 클래스 안에 있는 값은 새롭게 복사 되는것이 아니기에,
var firstClassReference = ReferenceType()
// 두 번째 참조 변수에 첫 번째 참조 할당
var secondClassReference = firstClassReference
secondClassReference.property = 2
이렇게 하면 firstClassReference.property의 값도 2가 된다.
728x90반응형'Programing Language > Swift' 카테고리의 다른 글
(Swift) assert / guard에 대해서 (0) 2019.10.28 (Swift) lazy 변수형 사용 방법 (0) 2019.10.25 (Swift) 구조체 정리 (0) 2019.10.10 (Swift) 옵셔녈[Optional] 정리 2/2 (0) 2019.10.10 (Swift) 옵셔녈[Optional] 정리 1/2 (0) 2019.10.10