초기화의 과정과 생성자

쏘스야·2023년 4월 14일
0

ios 개발자의 첫걸음

목록 보기
54/61
/**
 초기화의 과정과 생성자
 초기화(Initialization)
 */

// 생성자(Initializer) 구현의 기본

class Color {
    
    let red: Double
    let green: Double
    let blue: Double
    
    
    // 생성자 overloading 가능
    
    init() {        // "init()" -> 기본 생성자. 저장 속성의 기본값을 설정하면 "자동" 구현이 제공됨.
        red = 0.0
        green = 0.0
        blue = 0.0
    }
    
    init(white: Double) {
        red = white
        green = white
        blue = white
    }
    
    init(red: Double, green: Double, blue: Double){
        self.red = red
        self.green = green
        self.blue = blue
    }
}


var c = Color.init()
var c1 = Color(white: 2.0)

c = Color(red: 1.2, green: 1.4, blue: 2.3)
c.blue
c1.green


/**
 - 초기화의 방법(저장속성이 초기값을 가져야함.
 - 1. 저장 속성의 선언과 동시에 값을 저장
 - 2. 저장 속성을 옵셔널로 선언 (초기값이 없어도 nil로 초기화됨)
 - 3. 생성자에서 값을 초기화
 
 - 반드시 생성자를 정의해야만 하는 것은 아님
 
 - 1-2번 방법으로 이니셜라이져를 구현하지 않아도,
 - 컴파일러는 기본 생성자(Default Initializer) 를 자동으로 생성함 ==> init()
 - ==> 이니셜라이저을 구현하면, 기본 생성자를 자동으로 생성하지 않음
 */


// 멤버와이즈 이니셜라이저(Memberwise Initializer) - 구조체의 특벌한 생성자

// 구조체는 멤버와이즈 이니셜라이저 자동 제공

struct Color1 {
    var red: Double = 1.0
    var green: Double
    var blue: Double
}

var c2 = Color1(green: 1.2, blue: 4.3)
c2.blue


/**
 - 구조체는 저장 속성들이 기본값을 가지고 있더라도,
 - 추가적으로 Memberwise(멤버에 관한) 이니셜라이저를 자동으로 제공함.
 - 이니셜라이저을 구현하면, 멤버와이즈 이니셜라이저가 자동으로 제동되지 않음
 (멤버와이즈 이니셜라이저는 편의적인 기능일 뿐)
 */

//var color2 = Color1()
//color2 = Color1(red: 1.2, green: 3.2, blue: 4.3)
profile
개발자

0개의 댓글