나의 기록, 현진록

[Swift] 구조체와 클래스 본문

Programming/Swift

[Swift] 구조체와 클래스

guswlsdk 2021. 7. 15. 10:58
반응형

스위프트 프로그래밍 3판 - 야곰 지음

 

9.1 구조체

9.1.1 구조체 정의

struct 구조체이름{
    프로퍼티와 메소드
}
struct BasicInformation {
    var name: String
    var age: Int
}

var info: BasicInformation = BasicInformation(name: "hyunjin", age: 24)
info.name = "abc" //변경 가능
info.age = 100 //변경가능


let subinfo: BasicInformation = BasicInformation(name: "rupy", age: 50)
subinfo.name = "abc" //변경 불가
subinfo.age = 100 //변경 불가

구조체에 기본 생성된 이니셜라이저의 매개변수는 구조체의 프로퍼티 이름으로 자동 저장됩니다.

구조체를 상수 let으로 선언하면 인스턴스 내부의 프로퍼티 값을 변경할 수 없고, 변수 var로 선언하면 내부의 프로퍼티가 var로 선언된 경우에 값을 변경해줄 수 있습니다.


9.2 클래스

9.2.1 클래스 정의

 

class 클래스이름{
    프로퍼티와 메소드들
}

class 클래스이름: 부모클래스이름{
    프로퍼티와 메소드들
}
class Person{
    var height: Float = 0.0
    var weight: Float = 0.0
}

var hyunjin: Person = Person()
hyunjin.height = 184.6
hyunjin.weight = 72.1

let subinfo: Person = Person()
subinfo.height = 123.4
subinfo.weight = 123.4

 

구조체와 다르게 클래스의 인스턴스는 참조 타입이므로 클래스의 인스턴스를 상수 let으로 선언해도 내부 프로퍼티 값을 을 변경할 수 있습니다.

 

 

9.2.3 클래스 인스턴스의 소멸

클래스의 인스턴스는 참조 타입이므로 더는 참조할 필요가 없을 때 메모리에서 해제됩니다. 이 과정을 소멸이라고 하는데 소멸되기 직전 deinit 메소드가 호출됩니다. 클래스 내부에 deinit 메소드를 구현해주면 소멸되기 직전 deinit 메소드가 호출됩니다. 이를 디이니셜라이저(Deinitializer)라고 부릅니다. deinit은 클래스 당 하나만 구현할 수 있으며, 매개변수와 반환 값을 가질 수 없습니다. 소괄호도 적어주지 않습니다.

 

class Person{
    var height: Float = 0.0
    var weight: Float = 0.0

    
    deinit {
        print("Person 클래스의 인스턴스가 소멸됩니다.")
    }
    
}

var hyunjin: Person? = Person()
hyunjin = nil

 

 

 

 

반응형