Swift 초기화 이니셜라이져

태그: 

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • 모다피
      참가자
      • 글작성 : 7
      • 답글작성 : 1

      안녕하세요~! 모다피에요^^
      Swift 클래스에 초기화 이니셜라이저를 구현하다가 궁금한 것이 생겨서 글 남겨요.
      Designated init과 Convenience init의 정확한 의미의 차이가 궁금하더라고요.
      Apple 문서에 보면..Convenience init이 convenience init은 ‘같은클래스에서 다른 이니셜라이저를 호출해야한다’라고 하는데 이 의미도 잘이해가 되지 않더라고요..init은 모든 프로퍼티를 초기화하는 메소드이라서 Designated init은 특정 프로퍼티를 보조하는 이니셜라이저인가요?
      convenience init가 구체적으로 어떻게 사용되는지 궁금합니다!
      감사합니다.

    • delma
      참가자
      • 글작성 : 2
      • 답글작성 : 4

      designated init은 클래스의 모든 프로퍼티가 초기화될 수 있도록 해줘야 하고,
      convenience init은 쉽게 생각하면 보조 이니셜라이저라고 할 수 있는데, designated init의 파라미터 일부를 기본값으로 설정해서 convenience init 안에서 designated init 호출해서 쓸 수 있는거에요!

      class Beverage {
          var name: String
          var capacity: Int
      // 지정 이니셜라이저 - 모든 인스턴스의 저장 프로퍼티 값 초기화(할당)
          init(name: String, capacity: Int) {
          self.name = name
          self.capacity = capacity
          }
      //편의 이니셜라이저 - 지정 이니셜라이저를 통해 인스턴스 초기화
          convenience init(name: String) {
              self.init(name: name, capacity: 330)
          }
      }
      

      convenience init에는 속성 중 인스턴스 생성 시점에 지정해줘야 할 것만 파라미터로 넣어놓고, 그 안에서 기본값이 들어간 designate init 을 호출(같은 클래스에서 다른 이니셜라이저를 호출) 한다고 생각하시면 될거같아요!!

      • 야곰
        키 마스터
        • 글작성 : 37
        • 답글작성 : 580

        좋은 설명입니다~!
        조금 첨언하자면, 편의 이니셜라이저는 꼭 지정 이니셜라이저만 호출해야만 하는 것은 아니고 지정 이니셜라이저를 호출하는 다른 편의 이니셜라이저를 호출해도 됩니다. 다만 결국에 체인이 연결되는 끝 지점은 지정 이니셜라이저여야 하는거죠 🙂

1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom