[Swift] 객체 초기화 init

김영민·2022년 5월 21일
0

이번 게시물은 객체 초기화인 init에 대해 정리해보겠습니다.

Initializer

  • 객체를 사용하려면 초기화가 필요합니다.
  • 옵셔널이나 초기값이 있는 경우에는 자동으로 초기화가 됩니다!
  • 그러나 그렇지 않은 경우에는 수동으로 초기화 해주어야 합니다.
init()
{
	//객체 초기화
}
  • 이렇게 init을 통해 객체를 초기화 해줄 수 있습니다.

객체 초기화 예시

class Reactangle {
	var width : Int
    var height : Int
    
    init() {
    	width = 0
        height = 0
    }
}
  • 객체 생성 방식 : let rec = Rectangle()

파라미터가 있는 객체 초기화 예시

class Reactangle {
	var width : Int
    var height : Int
    
    init(width: Int, height: Int) {
    	self.width = width 
        self.height = height
    }
}
  • 객체 생성 방식 : let rec = Rectangle(width : 10, height: 20)

초기화 종류

  • Designated initializer

    • 객체 초기화를 단독으로 완료 가능
    • 모든 초기화가 필요한 프로퍼티 초기화
    • 클래스에 반드시 1개 이상 필요
  • Convenience initializer

    	- 단독으로 초기화 불가능
    • 일부 프로퍼티만 초기화
    • 다른 initializer를 이용해서 초기화
    • 중복 코드 방지

Designated initializer

class MyClass{
  var a : Int
  var b : Int
  
  init(a : Int, b : Int) {
    self.a= a
    self.b= b
  }
}
  • 모든 값 초기화
  • 초기화 끝나기 전에 다른 메소드 호출은 에러

Convenience initializer

class MyClass{
  var a, b : Int
  
  init() {
    a = 0
    b = 0
  }
  
  init(a:Int, b:Int) {
    self.a= a
    self.b= b
  }

  convenience init(b:Int) {
    self.init()    // Initializer delegation
    self.b= b
  }
}
  • 다른 초기화 메소드에 의존
  • 다양한 객체 생성 방법 제공
  • 초기화 코드의 중복 방지, 재사용 높이기

Failable Initializer

  • init? 을 통해 조건 검사를 하고 조건에 부합하지 않으면 nil 반환
  • ex) 나이가 음수, 출생연도가 음수 등

객체 해제

  • deinit을 설정해두면, 객체를 해제할 때 객체 해제가 실행됩니다.

0개의 댓글