본문 바로가기
Languages/Swift

사당 iOS 스터디 2주차 - 인스턴스 생성 및 소멸

by 탄이. 2018. 8. 17.

CHAPTER 11 인스턴스 생성 및 소멸

__11.1 인스턴스 생성

스위프트의 이니셜라이저는 반환 값이 없습니다.

클래스의 지정 이니셜라이저는 익스텐션에서 구현해줄 수 없습니다.

11.1.1 프로퍼티 기본값

  • 구조체와 클래스의 인스턴스는 처음 생성할 때 옵셔널 저장 프로퍼티를 제외한 모든 저장 프로퍼티에 적절한 초깃값을 할당해야 합니다.

  • 초기화 후에 값이 확정되지 않은 저장 프로퍼티는 존재할 수 없습니다.

  • 초기화와 프로퍼티 감시자

    • 이니셜라이저를 통해 초깃값을 할당하거나, 프로퍼티 기본값을 통해 처음의 저장 프로퍼티가 초기화될 때는 프로퍼티 감시자 메서드가 호출되지 않습니다.

11.1.2 이니셜라이저 매개변수

11.1.3 옵셔널 프로퍼티 타입

  • 인스턴스가 사용되는 동안에 값을 꼭 갖지 않아도 되는 저장 프로퍼티가 있다면 해당 프로퍼티를 옵셔널로 선언

  • 초기화 과정에서 값을 지정해주기 어려운 경우 저장 프로퍼티를 옵셔널로 선언

11.1.4 상수 프로퍼티

  • 상수 프로퍼티와 상속

    • 클래스 인스턴스의 상수 프로퍼티는 프로퍼티가 정의된 클래스에서만 초기화할 수 있습니다. 해당 클래스를 상속받은 자식클래스의 이니셜라이저에서는 부모클래스의 상수 프로퍼티 값을 초기화할 수 없습니다.

11.1.5 기본 이니셜라이저와 멤버와이즈 이니셜라이저

  • 기본 이니셜라이저는 저장 프로퍼티의 기본값이 모두 지정되어 있고, 동시에 사용자정의 이니셜라이저가 정의되어 있지 않은 상태에서 제공

  • 구조체는 사용자정의 이니셜라이저를 구현하지 않으면 프로퍼티의 이름으로 매개변수를 갖는 이니셜라이저인 멤버와이즈 이니셜라이저를 기본으로 제공

  • 클래스는 멤버와이즈 이니셜라이저를 지원하지 않습니다.

11.1.6 초기화 위임

  • 값 타입에서 이니셜라이저가 다른 이니셜라이저를 호출하려면 self.init을 사용

  • 초기화 위임을 하려면 최소 두 개 이상의 사용자정의 이니셜라이저를 정의해야 합니다.

  • 기본 이니셜라이저를 지키고 싶다면

    • 사용자정의 이니셜라이저를 정의할 때도 기본 이니셜라이저나 멤버와이즈 이니셜라이저를 사용하고 싶다면 익스텐션을 사용하여 사용자정의 이니셜라이저를 구현하면 됩니다.

  • 초기화 위임 방법을 사용하면 코드를 중복으로 쓰지 않고도 효율적으로 여러 case의 이니셜라이저를 만들 수 있습니다.

11.1.7 실패 가능한 이니셜라이저

  • 실패했을 때 nil을 반환해주므로 반환 타입이 옵셔널로 지정

  • init? 키워드를 사용

  • 이니셜라이저의 매개변수

    • 실패하지 않는 이니셜라이저와 실패 가능한 이니셜라이저를 같은 이름과 같은 매개변수 타입을 갖도록 정의할 수 없습니다.

    • 초기화를 실패했을 때는 return nil을, 반대로 초기화에 성공했을 때는 return을 적어 초기화의 성공과 실패를 표현할 뿐, 실제 값을 반환하지는 않습니다.

  • 실패가능한 이니셜라이저를 사용하면 잘못된 전달인자를 전달받았을 때 초기화하지 않을 수 있습니다.

11.1.8 함수를 사용한 프로퍼티 기본값 설정

  • 클로저가 실행되는 시점은 초기화할 때 인스턴스의 다른 프로퍼티 값이 설정되기 전이라는 것도 꼭 명심

  • 클로저 내부에서는 인스턴스의 다른 프로퍼티를 사용하여 연산할 수는 없다

  • 클로저 뒤에 소괄호가 붙어 클로저를 실행한 결과값은 프로퍼티의 기본값이 됩니다. 만약 소괄호가 없다면 프로퍼티의 기본값은 클로저 그 자체가 됩니다.

__11.2 인스턴스 소멸

디이니셜라이저는 클래스의 인스턴스에만 구현할 수 있습니다.

클래스에는 디이니셜라이저를 단 하나만 구현할 수 있습니다.

인스턴스의 모든 프로퍼티에 접근할 수 있으며 (큰 의미는 없을 수도 있지만) 프로퍼티의 값을 변경할 수도 있습니다.

디이니셜라이저를 잘 활용하면 메모리 관리 측면 외에도 프로그래머가 설계한 로직에 따라 인스턴스가 메모리에서 해제되기 직전에 적절한 작업을 하도록 할 수 있을 것




참고


야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019

댓글