티스토리 뷰
객체지향 프로그래밍의 근원인 객체를 다루기 위해 인스턴스가 생성되어야 합니다.
인스턴스의 생성은 곧 메모리를 잡아먹기 때문에 더 이상 필요 없는 인스턴스를 메모리에서 해제하기도 합니다.
이번 포스팅에서는 인스턴스의 생성과 소멸을 관리하는 initializer와 deinitializer에 관하여 알아볼 것입니다.
이니셜라이저(initializer)
struct C {
var a: String = "abc" // 기본값을 미리 넣어두면 프로퍼티 생성 시 초기화
var b: Double // 기본값이 없기 때문에 이니셜라이저를 통해 초기화
var c: Int!
var d: Int?
init() {
b = 32.0
}
}
var f = C()
//f.a = abc
//f.b = 32.0
initializer는 인스턴스를 생성할 때 초기값을 할당해줄 수 있는 메서드입니다.
클래스, 구조체 그리고 열거형에서 사용이 가능합니다.
만약 생성 시 초기값을 설정하고 싶지 않다면 옵셔널을 사용할 수 있습니다.
단, 암시적 추출 옵셔널 타입 변수는 초기값은 할당하지 않더라도 호출하기 전에는 반드시 값을 할당해줘야 합니다.
실패 가능한 이니셜라이저
struct Animal {
let species: String
init?(species: String) {
if species.isEmpty { return nil }
self.species = species
}
}
let someCreature = Animal(species: "Giraffe") // someCreature.species=Giraffe
let anonymousCreature = Animal(species: "") // anonymousCreature=nil
initializer매개변수로 전달되는 초기값이 잘못된 경우 인스턴스 생성에 실패할 수 있습니다.
인스턴스 생성에 실패하면 nil을 반환하며 이러한 이유로 반환 타입은 옵셔널 타입입니다.
일반 initializer와는 다르게 init에 옵셔널을 붙여 선언합니다.
디이니셜라이저(deinitializer)
class Book(){
func open(){}
func close(){}
deinit{
self.close()
}
}
var newbook=Book()
...
newbook = nil
deinitializer는 클래스 인스턴스가 해제되기 직전에 호출됩니다.
더 이상 필요하지 않은 인스턴스를 할당 해제하여 메모리를 확보할 수 있습니다.
initializer와는 다르게 클래스에서만 사용가능합니다.
nil을 통해 할당을 해제하면 할당 해제 직전에 deinitializer에 있는 메서드들이 실행됩니다.
따라서 직접 deinit을 호출하지 않아도 인스턴스의 역할을 마무리 할 수 있습니다.
'Swift' 카테고리의 다른 글
[Swift] Color Literal / Custom Color (0) | 2021.03.15 |
---|---|
[Swift] 익스텐션 (0) | 2021.01.17 |
[Swift] 프로퍼티의 종류 (0) | 2021.01.13 |
[Swift] 메서드 (0) | 2021.01.13 |
[Swift] 옵셔널 (0) | 2021.01.12 |
- Total
- Today
- Yesterday
- CompositionalLayout
- 네트워크 유량
- 최대 매칭
- 네트워크 플로우
- MeTal
- rxswift
- CPU와 Memory
- 벨만포드 시간복잡도
- WWDC21
- 최단경로 문제
- 벨만포드 알고리즘
- mach-o
- 다익스트라 시간복잡도
- 컴퓨터 추상화
- 에드몬드 카프 알고리즘
- State Restoration
- 강한 순환 참조
- WWDC16
- Testable
- 최단경로문제
- test coverage
- 부스트캠프 6기
- HIG
- 최단경로 알고리즘
- 코딩대회
- WWDC17
- observeOn
- WWDC19
- IOS
- 포드 풀커슨 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |