Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 빅데이터청년캠퍼스
- flownet
- cuda-10.2
- clean architecture
- IT연합동아리
- kotiln
- 빅데이터청년인재
- nvcc
- 빅데이터
- sending 404
- utuntu
- 코틀린
- 자바
- 넥스터즈
- 청년인재
- 이것만보면돼
- 딥러닝
- 알고리즘
- 소켓통신
- ubuntu18.04
- NEXTERS
- 안드로이드
- 인공지능
- DataBinding Error
- 머신러닝
- 데이터청년캠퍼스
- ubuntu
- resample2d_cuda
- Android
- 백준
Archives
- Today
- Total
보초의 코딩일기장
[Swift 입문] 클래스 vs 구조체/열거형 본문
클래스는 참조타입, 열거형과 구조체는 값 타입
클래스는 상속이 가능하지만 열거형과 구조체는 상속이 불가능하다
값타입 (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 | import Swift 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 //두번째 클래스 참조는 첫번째 클래스 인스턴스를 참조하기 때문에 값을 변경하게 되면 같이 변경된다. | cs |
예제)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import Swift struct SomeStruct{ //값을 그대로 복사하는 struct var someProperty: String = "Property" } var someStructInstance: SomeStruct = SomeStruct() func someFunction(structInstance: SomeStruct){ var localVar: SomeStruct = structInstance localVar.someProperty = "ABC" } someFunction(someStructInstance) print(SomeStructInstance.someProperty) //? | cs |
내가 이해한 바로는 someStructInstance 값이 복사되어 localVar 라는 구조체가 만들어진다.
someStructInstance 는 struct 이므로 변수 값만 복사되어 주었기 때문에 localVar 의 변수를 바꾸어 주더라도 someStructInstance 값의 변화는 없다.
즉 print 값은 Property
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import Swift class someClass{ //포인터와 비슷한 개념. 참조 타입 var someProperty: String = "Property" } var someClassInstance: someClass = someClass() func someFunction(structInstance: someClass){ var localVar: SomeStruct = structInstance localVar.someProperty = "ABC" } someFunction(someStructInstance) print(someClassInstance.someProperty) //? | cs |
Class 는 참조타입이므로 같은 메모리의 공유라고 생각하면 되지 않을까
이름만 다를 뿐 같은 영역을 쓰고 있다고 생각하기 때문에 localVar.someProperty ="ABC"로 바꾼다면 SomeClassInstance 값도 바뀔 것이다.
즉 print 값은 "ABC"
'낙서장 > edwith : swift 입문' 카테고리의 다른 글
[Swift 입문] 열거형 (0) | 2018.07.02 |
---|---|
[Swift 입문] 구조체, 클래스 (0) | 2018.07.02 |
[Swift 입문] 옵셔널 (0) | 2018.07.02 |
[swift 입문] 함수 기본, 조건문 (0) | 2018.06.27 |
[swift 입문] Any, AnyObject, nil, 컬렉션타입 (0) | 2018.06.27 |
Comments