/**
초기화의 과정과 생성자
초기화(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)