Apple/Swift

[iOS/Swift] 생성자(Constructor), 초기화(Initialization) 란?

59date 2024. 7. 26. 16:40

생성자(Constructor), 초기화(Initialization) 란?

 

먼저 생성자를 정의하자면

생성자는 클래스나 구조체의 인스턴스를 생성할 때 호출되는 특별한 메서드입니다. 이 메서드는 인스턴스의 초기 상태를 설정합니다.

 

생성자의 역할은 객체가 유효한 상태가 되도록 모든 필수 프로퍼티를 초기화하는 것입니다. 즉, 생성자는 객체가 생성된 후 사용할 준비가 완료된 상태로 만드는 작업을 담당합니다. 이를 통해 객체는 올바르게 설정된 프로퍼티를 가지며 예상된 동작을 수행할 수 있게 됩니다. 이 과정은 인스턴스 초기화라고 하며, 객체의 모든 속성에 적절한 초기값을 설정하는 작업을 포함합니다.

 

생성자의 기본 문법은

init(parameters) {
    // 생성자 본문(statements)
    // 프로퍼티를 초기화하거나 다른 초기화 작업을 수행
}
  • init : 생성자를 정의하기 위해 사용하는 키워드입니다.
  • parameters : 생성자에 전달되는 매개변수들입니다. 이 매개변수들은 생성자의 내부에서 인스턴스를 초기화하는 데 사용됩니다.
  • statements : 생성자의 본문으로, 프로퍼티를 초기화하거나 필요한 초기화 작업을 수행하면 됩니다.

이러합니다. 

 

다만 생성자 없이 즉 init를 사용하지 않아도 객체를 초기화할 수 있는 방법이 있습니다.

1. 프로퍼티에 기본 값 제공하기

2. 옵셔널 프로퍼티 사용하기

3. 구조체의 자동 초기화 

 

1번부터 예제를 확인해 보겠습니다.

프로퍼티에 기본 값 제공하기

struct Point {
    var x: Int = 0
    var y: Int = 0
}

let point = Point()  // 기본 생성자 사용
print(point.x)  // 0
print(point.y)  // 0

프로퍼티에 기본 값을 제공하면 Swift에서는 자동으로 기본 생성자를 생성합니다. 이 기본 생성자는 모든 프로퍼티를 기준값으로 초기화시킵니다.

 

옵셔널 프로퍼티 사용하기

struct Person {
    var name: String?
    var age: Int?
}

let person = Person()  // 기본 생성자 사용
print(person.name)  // nil
print(person.age)   // nil

프로퍼티를 옵셔널로 선언하면, 기본 생성자가 자동으로 생성됩니다. 이 경우 nil로 초기화됩니다.

옵셔널은 값이 있을 수도 있고 없을 수도 있음을 나타내는 데이터 타입입니다. 옵셔널을 사용하게 되면 프로퍼티가 nil일 수 있음을 명시적으로 표현할 수 있기에 초기화될 수 있습니다.

 

구조체의 자동 초기화

struct Rectangle {
    var width: Int
    var height: Int
}

let rectangle = Rectangle(width: 10, height: 20)  // 멤버와이즈 초기화 메서드 사용
print(rectangle.width)  // 10
print(rectangle.height) // 20

모든 프로퍼티에 기본값을 제공하거나 기본값이 없는 프로퍼티가 있는 경우, Swfit가 자동으로 멤버와이즈 초기화 메서드를 생성합니다.