13-1. 초기화 개념, 기본 초기화(initialization)

초기화는 인스턴스의 클래스, 구조체 또는 열거형을 사용하기 위해 준비하는 단계를 의미한다. 이 단계에서는 인스턴스에 저장된 프로퍼티에 초기값을 설정해주고, 새로운 인스턴스가 사용할 준비가 되기 전 다른 설정이나 초기화를 수행하는 것을 포함한다.

초기화 구문

  1. 초기화 구문은 특정 타입의 새로운 인스턴스를 생성하기 위해 호출된다.
init() {
	//초기화 구문 작성
}
  1. 새로운 구조체의 정의간 사용하는 초기화 구문의 예시는 다음과 같다. 이는 클래스에서도 똑같이 적용 가능하다.
struct Farenheit {
	var temperature : Double
    
    init() {
    	temperature = 32.0
        //값이 정의되지 않은 프로퍼티의 초기값을 설정해준다.
    }
}

var f = Farenheight()
//다음과 같이 구조체를 정의하면 초기값으로서 32를 가지는 프로퍼티와 함께 인스턴스가 생성된다.
  1. 기본적인 프로퍼티값을 바로 설정하여 초기화를 생략할 수 있다.
struct Farenheit {
	var temperature = 32.0
`
//다음과 같이 초기화를 해줄 시 별도 초기화 구문 생력이 가능하다.

초기화 구문 사용자화

  1. 초기화 구문에서 파라미터를 통해 인스턴스 생성 시 사용자가 원하는 값을 통해 생성이 가능하다.
struct Celsius {
	var temperature : Double
    
    init(temp : Int) {
    	temperature = temp
    }
    init(kelvin: Int) {
    	temperature = kelvin - 273.15
}

let cel = Celsius(temp : 21)
let cel1 = Celsius(kelvin : 290)
// 다음과 같이 초기화 파라미터를 통해서 프로퍼티의 초기화가 가능하다.
//초기화 시 원하는 초기화를 선택해서 적용이 가능하다.
  1. 초기화 파라미터 전달시 함수와 비슷하게, 인자 라벨을 부여하여 적용이 가능하다. 마찬가지로 인자 라벨의 생략 역시 가능하다.
struct Carrier {
	var carrier : Int
    
    init(from number : Int) {
    	carrier = number
    }
    
    init(_ name : Int) {
    	carrier = name
}

let carrier = Carrier(from : 100)
let carrier = Carrier(100)
//다음과 같이 인자 라벨을 사용하여 초기화가 가능하다.
  1. 사용자 타입 값이 초기화 동안 설정이 불가능하거나, 추후 값 없음을 가질 수 있기 때문에 이를 옵셔널 타입 프로퍼티로 선언하는 경우가 있다. 이럴 경우에는 초기화 시 아직 값 없음을 나타내기 위해서 nil로 초기화한다. 옵셔널 타입의 프로퍼티는 별도의 초기값을 명시하지 않으면 nil로 자동 초기화가 가능하다.
class SurveyQuestion {
	var text : String
    var response : String?
    init(text : String) {
    	self.text = text
    }
    
    func ask() {
    	print(text)
    }
}

let cheeseQuestion = SurveyQuestion(text : "Do you like cheese?")
//다음과 같이 초기화 가능하며, 비어있는 것이 가능하므로 초기에 nil부여가 가능하다.
  1. 초기화가 완료될 때까지 한정된 값으로 설정되는 한 초기화 중 언제든지 프로퍼티 상수에 값 할당이 가능하다. 클래스 인스턴스 경우 초기화 동안 프로퍼티 상수를 수정하는 것은 해당 프로퍼티를 도입한 클래스에 의해서만 가능하고, 하위 클래스에서는 안된다.
class SurveyQuestion {
	let text : String
    var response : String?
    
    init(text : String) {
    	self.text = text
    }
    
    func ask() {
    	print(text)
    }
}

let beetsQuestion = SurveyQuestiont(text : "How about beets?")
beetsQuestion.ask()
//비츠는 어때? 를 출력한다
beetsQuestion.response = "I also like beets"

좋은 웹페이지 즐겨찾기