클래스 vs 구조체/열거형
•클래스는 참조 타입, 열거형과 구조체는 값 타입이라는 것이 가장 큰 차이
•클래스는 상속이 가능하지만, 열거형과 구조체는 상속이 불가능
1. 값 타입과 참조 타입 비교
•값 타입(Value Type) : 데이터를 전달할 때 값을 복사하여 전달
•참조 타입(Reference Type) : 데이터를 전달할 때 값의 메모리 위치를 전달
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 instance property : \(firstClassInstance.property)") // 2 print ("second class instance property : \(secondClassInstance.property)") // 2 | cs |
2. 값 타입을 사용하는 경우
•연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶은 경우
•다른 객체 또는 함수 등으로 전달될 때 참조가 아니라 복사(값 복사) 할 경우
•자신을 상속할 필요가 없거나, 다른 타입을 상속 받을 필요가 없는 경우
3. 스위프트에서의 사용
•스위프트의 기본 데이터 타입은 모두 구조체로 구현되어있음
•스위프트는 구조체와 열거형 사용 선호
•Apple 프레임워크는 대부분 클래스를 사용
•구조체/클래스 선택과 사용은 개발자의 몫
제 나름대로 생각을 정리하며 포스팅합니다. 정보전달에 있어 차질이 생기는 것을 우려해 나름대로 확실하게 검증을 하고 포스팅하려고 노력합니다. 본 포스팅에 잘못된 정보가 있거나 수정해야할 내용이 있다면 댓글 또는 아래의 이메일로 알려주시면 감사하겠습니다. E-mail : silent_lhr@naver.com 공감은 로그인이 필요없습니다. 공감은 저에게 포스팅을 이어나갈 수 있는 힘이 됩니다.
'프로그래밍 [KOR] > Swift' 카테고리의 다른 글
Swift의 클로저 고급 (0) | 2018.10.11 |
---|---|
Swift의 클로저 (0) | 2018.10.10 |
Swift의 열거형 (0) | 2018.10.08 |
Swift의 클래스 (0) | 2018.10.08 |
Swift의 구조체 (0) | 2018.10.08 |