import Swift
//class:
// 단일상속
// 참조타입
// apple 프레임워크의 대부분의 큰 뼈대는 모두 클래스로 구성
//
//struct:
// 상속불가
// 값타입
// swift의 대부분의 큰 뼈대는 모두 구조체로 구성
//
//Enum:
// 상속불가
// 값타입
// 열거형 자체가 하나의 데이터 타입
// 열거형의 case 하나하나 전부 하나의 유의미한 값으로 취급
//
//struct(구조체) 언제 사용?
// 참조가 아닌 복사를 원할 때, 상속받을 필요가 없을 때
//
//Value vs Reference
// Value : 데이터를 전달할 때 값을 복사하여 전달
// Reference : 데이터를 전달할 때 값의 메모리 위치를 전달
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)") // first struct instance property : 1
print("second struct instance property : \(secondStructInstance.property)") // second struct instance property : 2
let firstClassReference = ReferenceType()
var secondClassReference = firstClassReference
secondClassReference.property = 2
print ("first class reference property : \(firstClassReference.property)") // first class reference property : 2
print ("second class reference property : \(secondClassReference.property)") // second class reference property : 2
struct SomeStruct {
var someProperty: String = "Property"
}
var someStructInstance: SomeStruct = SomeStruct()
func someFunction(structInstance: SomeStruct) {
var localVar: SomeStruct = structInstance
localVar.someProperty = "ABC"
}
// 복사되서 들어가기 때문에 property 그대로 값이 유지된다.
someFunction(structInstance: someStructInstance)
print(someStructInstance.someProperty) // Property
class SomeClass {
var someProperty: String = "Property"
}
var someClassInstance: SomeClass = SomeClass()
func someFunction(classInstance: SomeClass) {
var localVar: SomeClass = classInstance
localVar.someProperty = "ABC"
}
// 참조값이 전달되기 때문에 ABC 값으로 변경된다.
someFunction(classInstance: someClassInstance)
print(someClassInstance.someProperty) // ABC
// 스위프트는 구조체, 열거형 사용을 선호
// Apple 프레임워크는 대부분 class 사용
// Apple 프레임워크 사용시 struct/class 선택은 우리의 몫
'Swift > 기초&문법' 카테고리의 다른 글
스위프트 swift 프로퍼티 property (0) | 2018.08.31 |
---|---|
스위프트 swift 클로저 (0) | 2018.08.30 |
스위프트 swift imagepicker delegate 사진선택 (0) | 2018.08.28 |
스위프트 swift music player 음악재생 앱 (0) | 2018.08.27 |
스위프트 swift 피커뷰 원하는 이미지 선택 (0) | 2018.08.24 |