iOS/Swift

인스턴스 생성 및 소멸 1편

밤새는 탐험가89 2024. 1. 29. 11:29

 

초기화 (initialization)

클래스와 구조체 또는 열거형의 인스턴스를 사용하기 위한 준비과정 

 

초기화가 완료된 인스턴스는 사용 후에 

소멸 시점이 오면 소멸

 

 

 

인스턴스 생성

이니셜라이저(initializer) 정의하면 초기화 과정 구현 가능 

(이니셜라이저는 반환값 없음)

 

"init" 키워드를 사용하여 구현 

 

기본적인 형태의 이니셜라이저 

class SomeClass {
    init() {
        // 초기화할 때 필요한 코드
	}
}

 

 

 

프로퍼티 기본값 

구조체와 클래스의 인스턴스는 

옵셔널 저장 프로퍼티를 제외하곤 

모든 저장 프로퍼티에 적절한 초기값을 할당해야 함 

 

구조체와 이니셜라이저

struct Market {
    var name: String 
    
    init() {
        name = "E-Mart"    // name의 초기값 할당
    }
}

let myMarket: Market = Market()
print(myMarket.name)       // E-Mart

 

 

init() 을 통해 인스턴스를 초기화하여 

초기값 "E-Mart" 할당 

 

위의 방법 말고도 

프로퍼티를 정의할 때 기본값을 할당하는 방식도 있음

 

 

프로퍼티 기본값 지정 

struct Market {
    var name: String = "E-Mart"
}

 

 

 

 

이니셜라이저 매개변수 

 

이니셜라이저는 매개변수를 통해

인스턴스를 초기화하는 과정에 필요한 값을 

전달 받을 수 있음

 

이니셜라이저 매개변수

struct Fruit {
    var name: String 
    
    init(when season: String) {
        name = season
    }
    
    init(when name: String) {
        self.name = name
    }
    
    init(name: String) {
        self.name = name
    }
    
    init(_ season: String) {
        name = season
    }
}


let apple: Fruit = Fruit(when: "Spring")
print(apple.name)

 

 

 

 

옵셔널 프로퍼티 타입

 

인스턴스가 사용되는 동안에 꼭 값을 안 갖지 않아도 되는

저장 프로퍼티가 있다면 => 옵셔널 프로토타입 선언

 

옵셔널로 선언한 저장 프로퍼티 경우 

초기화 과정에서 값을 할당하지 않았기 때문에 

자동으로 "nil" 할당

 

옵셔널로 선언한 저장프로퍼티 

class Contact {
    var name: String 
    var phoneNumber: String
    var age: Int? 
    
    
    init(name: String, phoneNumber: String) {
        self.name = name
        self.phoneNumber = phoneNumber
    }
}

let mary: Contact = Contact(name: "Mary", phoneNumber: "123-456-7890")

print(mary.name)
print(mary.age)


// Mary 
// nil

 

 

 

상수 프로퍼티 

저장 프로퍼티를 "let" 키워드를 사용하여 상수로 선언하게 된다면

인스턴스를 초기화하는 과정에서만 값을 할당할 수 있음 

 

상수 프로퍼티의 초기화

class Contact {
    let name: String 
    init(name: String) {
        self.name = name
    }
}

let mary: Contact = Contact(name: "Mary")

print(mary.name)
// Mary 


mary.name = "Mary jane"  // 오류 발생

 

'iOS > Swift' 카테고리의 다른 글

인스턴스 생성 및 소멸 3편 (초기화 위임)  (0) 2024.01.31
인스턴스 생성 및 소멸 2편  (0) 2024.01.30
메서드  (0) 2024.01.26
프로퍼티 4편 (타입 프로퍼티)  (1) 2024.01.25
프로퍼티 3편 (프로퍼티 감시자)  (0) 2024.01.23