-
인스턴스 생성 및 소멸Swift 2020. 12. 28. 18:21
안녕하십니까. 그린입니다!
오늘 포스팅에서는 인스턴스의 생성 및 소멸에 관해 나눠보겠습니다.
지금까지 클래스나 구조체를 생성 시 이니셜라이저를 통해 기본적인 인스턴스를 생성했습니다.
초기화 되는 과정이죠. 그런데 이번 주제에서는 초기화 과정에서 초기값을 설정하고 소멸시키는걸 알아보겠습니다.
1. 인스턴스 생성
-. 이니셜라이저를 정의하여 초기화 과정을 통해 초기값을 직접 할당할 수 있습니다.
즉 이니셜라이저가 초기값을 지정하는 메서드입니다!
-. init 키워드를 사용합니다. 클래스/구조체/열거형 함수 안 혹은 익스텐션으로 구현할 수 있습니다.
(클래스에선 익스텐션으로 구현할 수 없습니다.)
class TestClass { init() { //초기값 구현 } }
1-1) 프로퍼티 기본값
-. 클래스.구조체 등 전역 프로퍼티의 기본값을 이니셜라이저를 통해 초기값을 할당해 줄 수 있습니다. (기본값을 할당합니다.)
struct Test { var testData: Int init() { testData = 10 // 초기값 할당 } } let test: Test = Test() print(test.testData) // 10 출력
1-2) 이니셜라이저 매개변수
-. 클래스.구조체 등 정의 시 이니셜라이저도 여러 매개변수를 가질 수 있습니다.
struct Test { var testData: Int init(first firstNumber: Int) { testData = firstNumber } init(value secondNumber: Double) { testData = secondNumber } } let first: Test = Test(first: 10) // 초기값 10 저장 let second: Test = Test(value: 20) // 초기값 20 저장
1-3) 옵셔널 프로퍼티 타입
-. 인스턴스 사용되는 동안 값을 가지지 않아도 되는 저장 프로퍼티가 있으면 옵셔널로 선언 가능
-. 값을 주지 않는다면 nil로 선언됨
class Test { var firstNum: Int var secondNum: Double? init(firstNum: Int) { self.firstNum = firstNum } } let test: Test = Test(firstNum: 10) test.secondNume = 20
1-4) 상수 프로퍼티
-. 프로퍼티를 변수가 아닌 상수로 선언해준다면 초기값 설정 후 프로퍼티로 접근하여 다른 값으로 변경할 수 없습니다.
class Test { let num: Int init(num: Int) { self.num = num } } let test: Test = Test(num: 10) // 초기값 상수 10 저장 test.num = 20 // 오류
1-5) 기본 이니셜라이저 / 멤버와이즈 이니셜라이즈
-. 함수 내에서 기본적으로 값을 저장해주는 기본 이니셜라이저 (프로퍼티에 기본값이 저장되어있어야 함)
-. 프로퍼티 기본값으로 초기화하여 인스턴스 생성
-. 멤버와이즈 이니셜라이저란??? 프로퍼티 이름으로 매개변수를 갖는 이니셜라이저 !!!
-. 사용자 정의 이니셜라이저를 구현하지 않는다면 멤버와이즈 이니셜라이저가 기본으로 구현됨
(클래스는 멤버와이즈 이니셜라이저 지원 안됨)
struct Test { var first: Int = 10 var second: Int = 20 }
1-6) 초기화 위임
-. 이니셜라이저가 다른 이니셜라이저에게 일부 초기화를 위임할 수 있습니다.
(클래스는 상속을 사용함으로 초기화 위임 지원되지 않습니다.)
-. self.init을 사용
1-7) 실패 가능한 이니셜라이저 (Failable initializer)
-. init? 키워드를 사용
-. 열거형에서 주로 사용
class Test { var num: Int init?(num: Int) { //조건 구현 } }
1-8) 함수 사용한 프로퍼티 기본값 설정
-. 클로저 뒤 소괄호를 붙임
-. 클로저를 실행한 결과값이 프로퍼티의 기본값이 됩니다.
class Test { let num: NumType = { //인스턴스 생성 반환 return someNume }() }
2. 인스턴스 소멸
-. 디이니셜라이저를 통해 구현
-. 메모리에서 소멸되기 직전에 호출됨
-. deinit 키워드 사용
-. 클래스의 인스턴스에서만 구현 가능
-. 한 클래스에서 하나의 디이니셜라이저만 구현 가능
-. 매개변수를 갖지않고 소괄호도 붙이지 않습니다.
-. 자동 호출됨으로 별도 코드로 호출할 수 없습니다.
이상으로 인스턴스의 사용자 정의 생성 혹은 기본 이니셜라이저 더 나아가 멤버와이즈 이니셜라이저까지
생성에 대해 알아봤으며, 인스턴스 소멸에 대해 알아봤습니다.
Swift 문법에서 인스턴스의 생성은 빠질 수 없는 부분이라 꼭 다시 되새기며 학습해보면 좋을것 같습니다.
해당 포스팅의 학습 내용의 출처는 스위프트 프로그래밍 3판 (야곰 지음) 교재에서 학습한 내용입니다!!
감사합니다 :D
'Swift' 카테고리의 다른 글
메모리 구조 & ARC (0) 2021.01.11 Concurrent Programming (0) 2021.01.07 JSON 데이터 다루기 (0) 2020.12.23 고차함수와 함수형 프로그래밍 (0) 2020.12.18 제네릭 (0) 2020.12.13