728x90
240307
생성자 Initializer
구조체 열거형 클래스 는 설계도
설계도로 만든 새로운 값을 Instance(객체)
새로운 Instance 를 만드는 과정을 Initialization (즉 초기화)
초기화의 목적 : 모든 속성을 적절한 값으로 초기화 해서 인스턴스를 기본상태로 만드는 일
class Position {
var x = 0.0 //선언과 동시에 기본 값을 저장하는 방법. 동일한 방법으로 초기화 할 때
var y: Double //
var z: Double? //옵셔널은 기본 값을 저장 하지 않으면 자동으로 nil로 초기화 한다
init() {
y = 0.0 // 이렇게 하는게 귀찮아? 그래서 컴파일러가 디폴트 값을 호출해 줌
}
}
let p = Position()
// 이렇게 이니셜라이저를 호출하면 디폴트 이니셜라이저를 호출해 주는 것
//이니셜라이저를 직접 구현한다면 [init(){}] --> 이거 !! 디폴트 이니셔라이저는 제공 되지 않는다
//파라미터가 없는 이니셜라이저가 필요하다면 직접 구현 해야한다
Initialization 구현
class SizeObj {
var width = 0.0
var height = 0.0
init(width: Double = 0.0, height: Double = 0.0) {
self.width = width
self.height = height
}
convenience init(value: Double) {
// width = value
// height = value
self.init(width: value, height: value)
}
}
아 이해 못했어 ㅠㅠ
왜 slef.init 을 쓰는지
convenience 를 쓰는지,,
이해하면 보충해 볼게
구조체
struct SizeValue {
var width = 0.0
var height = 0.0
}
//모든 속성이 기본 값을 갖고 있고 이니셜라이저를 구현하지 않은 상태
//그러면 디폴트 이니셜라이저가 자동으로 제공 된다
let s = SizeValue() //그러면 이렇게 인스턴스를 만들 수 있다
SizeValue(width: <#T##Double#>, height: <#T##Double#>) //구조체는 특별한 이니셜라이저를 제공한다
//아규먼트 레이블을 보면 속성이름이랑 똑같다,
/*
파라미터의 갯수도 속성의 갯수와 똑같다. 파라미터로 모든 속성을 초기화 할 수 있고,
이 생성자를 멤버와이즈Memberwise라고 한다.
디폴트 이니셜라이저 처럼 이니셔라이저를 직접 구현하지 않았을때 자동으로 제공 되는 것.
이니셜라이저를 직접 구현한다면 사용할 수 없다
*/
정리
이니셜라이저의 역할은 인스턴스 초기화
이니셜라이저의 실행이 끝났을 때 모든 저장 속성이 기본값을 가지고 있어야한다
속성은 선언과 동시에 초기화 할수있다
모든 속성이 선언되어 있고 이니셜라이저를 구현하지 않는다면 파라미터가 없는 디폴트 이니셜라이저가 자동으로 제공된다

728x90
'iOS Swift > 문법' 카테고리의 다른 글
Swift Variables and Constants (0) | 2024.03.13 |
---|---|
[Swift] Property observer 프로퍼티 관찰자(옵저버) (0) | 2024.03.11 |
UITableViewDataSource, UITableViewDelegate (1) | 2024.02.28 |
[Swift] Array (0) | 2024.02.22 |
[Swift] String Comparison & Searching (0) | 2024.02.21 |
댓글