Swift - Initialization(Initializer Delegation)

이원석·2024년 11월 27일

Swift

목록 보기
19/38

Initializer Delegation

Initializer Delegation이란, 생성자에서 또 다른 생성자를 호출하여 초기화 코드의 중복을 최대한 제거하고, 모든 프로퍼티를 효율적으로 초기화 하기위해 사용하는 것.
값(구조체) 형식와 참조(클래스) 형식이 다르다.(상속의 여부가 갈리기 때문)

값 타입에서의 Initializer Delegation

struct Position {
    var x: Int
    var y: Int
    
    
    init(xPos: Int, yPos: Int) {
        x = xPos
        y = yPos
    }
    /// 옳바르지 않은 예(중복된 코드)////
    init(pos: Int) {
        x = pos
        y = pos
    }
    //////옳바른 예//////
    init(pos: Int) {
       self.init(xPos: pos, yPos: pos)
    }
}

참조 타입에서의 Initializer Delegation

  • Delegate Up
    Designated Initializer는 반드시 슈퍼 클래스의 Designated Initializer를 호출해야 함.(슈퍼클래스의 Designated Initializer를 호출하는 다른 이니셜라이저를 호출하는 것도 안됨)
  • Delegate Across (1)
    Convenience Initializer는 반드시 동일한 계층(같은 클래스)의 initializer를 호출해야 함
  • Delegate Across (2)
    Convenience Initializer는 최종적으로 동일한 계층(같은 클래스)의 Designated initialize를 호출해야 함
class People: Human {
	var nickNameL: String
    
    init(nickName: String){
    	self.nickName = nickName
        super.init(name: "unknown") // Delegate Up
    }
    
    convenience init(){
    	self.init(nickName: "unknown") // Delegate Across
    }
}

참조
개발자 소들이

0개의 댓글