[swift] Swift에서의 프로퍼티의 초기화

Swift에서는 클래스, 구조체, 열거형 등 다양한 타입을 사용하여 프로그래밍을 할 수 있습니다. 이러한 타입들은 자체적으로 속성을 가지며, 이를 프로퍼티(Property)라고 합니다. 프로퍼티는 해당 타입의 인스턴스를 생성할 때 값을 초기화하는 역할을 합니다.

프로퍼티는 초기값을 가지거나, 나중에 값을 할당받을 수도 있습니다. 이 초기화 작업은 해당 타입의 init() 메서드를 통해 수행할 수 있습니다. 이번 포스트에서는 Swift에서 프로퍼티의 초기화 방법을 알아보도록 하겠습니다.

기본값으로 초기화하기

프로퍼티에 초기값을 할당하는 가장 간단한 방법은 기본값(default value)을 지정하는 것입니다. 이렇게 하면 해당 프로퍼티는 인스턴스를 생성할 때 자동으로 초기값을 갖게 됩니다. 예를 들어, 다음과 같이 Person 클래스가 있다고 가정해봅시다.

class Person {
    var name: String = "Unknown"
    var age: Int = 0
    var height: Double = 0.0
}

위의 코드에서 name, age, height 프로퍼티는 모두 기본값을 가지도록 선언되었습니다. 이를 통해 Person 인스턴스를 생성할 때 기본값으로 초기화할 수 있습니다.

let person = Person()
print(person.name) // "Unknown"
print(person.age) // 0
print(person.height) // 0.0

옵셔널 프로퍼티 초기화

프로퍼티에 기본값을 지정할 수 없는 경우, 옵셔널(Optional)로 선언하여 초기화할 수 있습니다. 이는 해당 프로퍼티가 값이 없을 수도 있다는 것을 의미합니다. 예를 들어, 다음과 같은 Car 클래스가 있다고 가정해봅시다.

class Car {
    var brand: String?
    var year: Int?

    init(brand: String, year: Int) {
        self.brand = brand
        self.year = year
    }
}

위의 코드에서 brandyear 프로퍼티는 옵셔널 타입으로 선언되어 있습니다. 이를 통해 Car 인스턴스를 생성할 때 brandyear 값을 전달할 수도 있고, 전달하지 않을 수도 있습니다.

let car1 = Car(brand: "Tesla", year: 2022)
print(car1.brand) // Optional("Tesla")
print(car1.year) // Optional(2022)

let car2 = Car(brand: "BMW", year: nil)
print(car2.brand) // Optional("BMW")
print(car2.year) // nil

초기화 메서드에서 프로퍼티 초기화하기

프로퍼티 초기화는 인스턴스를 생성할 때 직접 할당하는 것 외에도, 초기화 메서드를 통해 값을 할당할 수도 있습니다. 초기화 메서드는 해당 타입에 정의된 init() 메서드를 호출하여 프로퍼티를 초기화합니다.

예를 들어, 다음과 같은 Book 클래스가 있다고 가정해봅시다.

class Book {
    var title: String
    var author: String

    init(title: String, author: String) {
        self.title = title
        self.author = author
    }
}

위의 코드에서 titleauthor 프로퍼티는 초기화 메서드를 통해 전달된 값으로 초기화됩니다.

let book = Book(title: "Swift Programming", author: "John Smith")
print(book.title) // "Swift Programming"
print(book.author) // "John Smith"

참조타입의 프로퍼티 초기화

Swift에서 클래스는 참조타입이므로, 클래스의 인스턴스를 다른 변수나 상수에 할당하면 같은 인스턴스를 참조하게 됩니다. 이 경우에는 초기화된 인스턴스를 참조하는 변수나 상수를 통해 프로퍼티에 접근할 수 있습니다.

let person1 = Person()
person1.name = "Alice"
person1.age = 25

let person2 = person1
print(person2.name) // "Alice"
print(person2.age) // 25

person1.name = "Bob"
print(person2.name) // "Bob"

위의 예시에서 person2 변수는 person1 변수가 참조하는 Person 인스턴스와 같은 인스턴스를 참조하게 됩니다. 따라서 person2를 통해 person1의 프로퍼티에 접근하면 동일한 값이 출력됩니다.

결론

Swift에서의 프로퍼티 초기화는 기본값을 설정하거나, 옵셔널 타입으로 선언하거나, 초기화 메서드를 통해 값을 할당하는 방법 등 다양합니다. 초기화된 프로퍼티를 통해 객체를 생성하고 속성에 접근할 수 있는데, 이를 통해 Swift의 강력한 객체 지향 프로그래밍 기능을 활용할 수 있습니다.

참고 자료: