본문 바로가기
iOS Swift/문법

[Swift] Initializer

by 야고이 2024. 3. 7.
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

댓글