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 선택은 우리의 몫









+ Recent posts