인스턴스 생성 - TIL34

future0159 2월 2일 AM 08:58 6 1
future0159 Profile Image Level 9
1

인스턴스 생성

클래스나 구조체등의 인스턴스를 생성할 떄 항상 저장프로퍼티의 값들을 할당해주었는데, 이러한 이유는 인스턴스가 생성되었을 때 안에 들어있는 프로퍼티는 정상적인 값들이 초기화되어야 한다는 원칙이 있기 때문이다.
그래서 기본값을 할당하지 않으면 에러가 발생하기 때문에 인스턴스를 생성해준 다음에 프로퍼티에 적절한 값들을 넣어주었다.
하지만 이것은 우리의 의도와 맞지 않지 않기 때문에 초기화와 동시에 할당해주는 방식으로 initializer를 사용할 수 있다. 이때 함수와 비슷하긴 하지만 함수 키워드 func를 사용하지 않으며, init()을 통해 프로퍼티 초기화를 마친뒤 인스턴스를 생성하게 된다. 만약 이때 모든 매개변수의 값을 할당할 필요가 없다면 해당 프로퍼티에 옵셔널을 사용하면 되기에 또다른 별도의 Initializer를 통해서 처리한다. 이때 중복된 코드가 있다면 자신의 initializer를 호출함으로써 보다 간결하게 사용이 가능하다.

Initializer

프로퍼티 초기값이 필요없고 자신의 initializer를 호출할 때

class Person {
    var name: String
    var age: Int
    var nickName: String?

    init(name: String, age: Int){
        self.name = name
        self.age = age
    }

    convenience init(name: String, age: Int, nickname: String){
        self.init(name: name, age: age)
        self.nickName = nickName
    }
}

초기값이 필요없기 항상 필요하지 않은 경우이기 때문에 옵셔널로 지정해주고, convenience라는 키워드를 통해서 자신의 initializer를 호출함으로써 코드를 간결하게 유지할 수 있다.

프로퍼티에 암시적 추출 옵셔널 사용

class Person {
  var nickName: String!
  ...
  
}

이때 암시적 추출 옵셔널로 지정한다면, 초기값을 할당하진 않지만 해당 프로퍼티를 사용하기 전까진 값을 할당해주어야 한다.

댓글