KWiOS
KWiOS0101
KWiOS
  • 분류 전체보기 (108)
    • Algorithm (41)
      • 이코테 (14)
      • 이코테 문제풀이 (21)
      • 프로그래머스 (6)
    • CS (1)
      • 모두를 위한 컴퓨터 과학(CS50 2019) (0)
    • iOS (15)
    • Swift (36)
      • Swift문법 (32)
      • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 6

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
KWiOS

KWiOS0101

Swift/Swift문법

Swift문법 - Class Initializer

2023. 5. 7. 23:21

Class Initializer

클래스에서는 2가지 이니셜라이저가 제공된다

  1. Designated 이니셜라이저 - 지정 생성자
  2. convenience 이니셜라이저 - 간편 생성자

Designated Initializer (지정 생성자)

클래스의 모든 저장 프로퍼티를 초기화할수 있는 생성자

키워드는 따로 없고 기존 init과 동일하게 사용

init 사용시에 클래스 프로퍼티가 모두 초기화 되야한다.

class Test {
var first: String
var second: String

init(first: String, second: String) {  
    self.first = first  
    self.second = second  
}  
}

 

Convenience Initializer (간편 생성자)

가능한 중복을 없애기 위해 필요한 속성만 초기화하고, 클래스에 있는 다른 생성자를 호출해서 나머지 초기화를 완료하도록 구현한다.

convenience 키워드 사용

convenience init안에서 Designated init을 호출하여 초기화를 진행한다.

convenience init을 사용하기 위해서는 반드시 Designated init을 선언해주어야 한다.

같은 클래스에서 다른 이니셜라이저를 호출해야하기 때문에 슈퍼 클래스의 이니셜라이저는 호출할 수 없다. 이때문에 오버라이딩은 불가능하다.

무조건 작성해야하는건 아니고 필요할때 생성해서 사용 가능함

생성자 델리게이션 - 다른 이니셜라이저를 이용해서 초기화하는것

생성자 델리게이션 규칙 (클래스에서 사용할 때 / 참조형식)

  1. 데지그네이션 생성자는 반드시 슈퍼클래스의 데지그네이션 생성자를 호출한다.
  2. 컨비니언스 생성자는 반드시 같은 클래스의 다른 생성자를 호출한다.
  3. 컨비니언스 생성자를 호출했을때 최종적으로는 반드시 데지그네이션 생성자가 호출되어야 한다.
class First {
var first: String

init(name: String) {  
    first = name  
}  
}

class Second: First {
var second = 0
var three = 0

init(n: String, value1: Int, value2: Int) {  
    second = value1  
    three = value2  
    super.init(name: n) // 델리게이트 업 1번 규칙  
}  

convenience init(value: Int) {  
    self.init(n:"hello", value1: value, value2: value) // 델리게이트 어크로스  
}  
}

class Three: Second {

// 속성이 선언되어있지 않음  
// 이 경우에는 세컨드 클래스의 지정생성자가 상속됨  


// 상속받은 세컨드 클래스의 지정생성자를 호출하기때문에 self를 사용  
// 컨비니언스는 델리게이션 업 불가능함  
convenience init(value: Int) {  
    self.init(n:"Swift", value1: value, value2: value)  
}  
//  
convenience init() {  
    self.init(value: 10)  
}  
}
```

Automatic Initializer Inheritance(오토메틱 이니셜라이저 인헤리턴스) 자동 생성자 상속
특정 조건에서 슈퍼클래스의 이니셜라이저를 서브클래스에 상속시켜주는 이니셜라이저

class의 경우 이니셜라이저가 실행이 완료되기 전에, super class의 이니셜라이저를 호출해줘야 한다.

생성자 상속 규칙

서브 클래스의 모든 속성이 기본값으로 초기화되어 있어야 한다.
서브 클래스에서 Designated 생성자를 직접 구현하지 않으면, 상위 클래스의 모든 Designated 생성자가 상속된다.
하위 클래스가 모든 Designated 생성자를 상속받았거나 재정의했다면 모든 Designated 생성자가 상속된다.
```swift
class A {

let a: Double  
let b: Double  

init(a: Double, b: Double) {  
    self.a = a  
    self.b = b  
}  
}

class B: A {

var c: Double = 0.0  
}
// 하위 클래스의 속성에 기본값을 주고, 지정 생성자를 구현하지 않아서 상위 클래스의 모든 지정 생성자가 상속되었다.

class B: A {

var c: Double  
init(a: Double, b: Double, c: Double) {  
    self.c = c  
    super.init(a: a, b: a)  
    }  
}
// 이니셜라이저를 통해 클래스에 있는 모든 속성을 초기화한 다음, 상위 클래스에 있는 designated initailizer를 호출해주어야한다.

'Swift > Swift문법' 카테고리의 다른 글

Swift문법 - 이니셜라이저 델리게이션  (0) 2023.05.21
Swift문법 - required initializers  (0) 2023.05.14
Swift문법 - Memberwise Initialer  (0) 2023.04.30
Swift문법 - Inheritance  (1) 2023.04.23
Swift문법 - Method  (0) 2023.04.16
    'Swift/Swift문법' 카테고리의 다른 글
    • Swift문법 - 이니셜라이저 델리게이션
    • Swift문법 - required initializers
    • Swift문법 - Memberwise Initialer
    • Swift문법 - Inheritance
    KWiOS
    KWiOS

    티스토리툴바