일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- init
- optional
- String
- tuist
- Xcode
- Swift
- url
- 코딩테스트
- UIKit
- initializer
- enum
- type
- struct
- 스위프트
- IOS
- Terminal
- Git
- Foundation
- instance
- Protocol
- Class
- 디자인패턴
- extension
- Unicode
- initalizer
- property
- delegate
- interpace
- 이니셜라이저
- Method
Archives
- Today
- Total
아리의 iOS 탐구생활
[Swift] 이니셜라이저(initalizer) / 기본 개념 [1] 본문
반응형
이니셜라이저(initalizer)란?
쉽게 예를 들어본다면 아이폰에서 공장초기화를 하는 것을 생각해보면 된다.
초기에 상품이 나올때의 상태로 세팅하는 것과 같다고 볼 수 있다.
- class, struct, enum 등의 Instance를 생성할 때 필요한 값들을 넣어주는 준비 작업이다.
- Property의 초기값을 설정한다.
- 초기화 작업이 완료되면 메모리에 Instance가 생성 된다.
가장 기본적인 형태는 매개변수가 없는 형태이다.
init() {
// 이 곳에서 초기화를 구현
}
struct Say {
var text = "말"
init() {
print(text)
}
}
let test = Say() // 출력: 말
🔍 기본값을 지정하여 초기화
초기화할때 프로퍼티의 선언과 동시에 값을 할당하면 그 값을 초기값으로 사용할 수 있다.
항상 같은 초기값을 가져야한다면 프로퍼티 선언과 동시에 초기값을 할당하는 것이 좋다.
// 저장 프로퍼티에 기본값을 저장해주면 이니셜라이저 생성을 생략할 수 있다.
struct People {
var name: String = "LeeAri"
var height: Int = 164
}
그러나 이니셜라이저를 생략하고 기본값으로 초기화할 경우, 초기화와 동시에 프로퍼티에 값을 전달해주기 어려운 상황이 된다. 이러한 경우에는 이니셜라이저를 이용하는 것이 좋겠다.
🔍 initalizer를 사용하여 초기화
이니셜라이저는 메서드와 달리 괄호 앞에 식별할 수 있는 이름이 없기 때문에
매개변수 이름과 타입이 initalizer를 식별하는데에 아주 중요한 역할을 한다.
문법은 흔히 우리가 사용하는 메서드와 같다.
struct Info {
. . .
// 키만 출력
init(tall : Double) { . . . }
// 키와 몸무게 출력
init(tall: Double, weight: Double) { . . . }
// 발사이즈만 출력
init(_ foot: Int) { . . . }
}
let tall = Info(tall: 164.2) // 키: 164.2cm
let weight = Info(tall: 164.2, weight: 53.2) // 키: 164.2cm, 몸무게: 53.2kg
let foot = Info(245) // 245
🖐🏻 이니셜라이저의 역할
- Swift는 에러에 대한 안전을 최우선시 한다.
- 빈 메모리에 접근하게 된다면 예기치 못한 에러가 발생할 수 있다.
- 타입 내부에 프로퍼티가 있다면 해당 프로퍼티에는 무조건 값이 있다는 것을 보장해야 한다.
🔍 실패 가능한 initalizer
초기화 과정 중에 실패할 가능성이 있는 initalizer도 만들 수 있다.
반환 값으로 Optional을 반환하고 초기화 실패시 nil을 반환한다.
struct Info {
let footSize: String
init?(_ foot: String) {
if foot.isEmpty { return nil }
self.footSize = foot
}
}
var ari = Info("") // nil
👉🏻 주의 : initalizer는 매개변수명과 Type으로 구분하기 때문에
실패 가능한 initalizer인 경우도 같은 매개변수명과 Type을 사용할 수 없다.
🔍 다양한 종류의 Property
상수 프로퍼티
- 상수는 값을 바꿀 수 없다는 법칙은 initalizer에게 통하지 않는다.
- 만약 값이 없다면 새 값을 할당하는 것은 가능하지만 할당 이후에 변경하는 것은 불가능 하다.
struct Info {
let footSize: Int
init(_ foot: Int) {
self.footSize = foot
}
}
var ari = Info(245)
// ari.footSize = 240
// error: cannot assign to property: 'footSize' is a 'let' constant
Optional Type 프로퍼티
- Property를 옵셔널 타입으로 선언한 경우 초기값이 없어도 되고 나중에 추가도 가능하게 된다.
- 초기값이 없는 경우에는 자동적으로 nil로 초기화 된다.
struct Info {
var tallSize: Double?
var weightSize: Double?
var footSize: Int?
// 키만 출력
init(tall: Double, foot: Int) {
self.tallSize = tall
self.footSize = foot
}
}
var ari = Info(tall: 164.1, foot: 245)
print(ari)
// Info(tallSize: Optional(164.1), weightSize: nil, footSize: Optional(245))
ari.weightSize = 53.2
print(ari)
// Info(tallSize: Optional(164.1), weightSize: Optional(53.2), footSize: Optional(245))
✔️ Apple 공식문서
반응형
'Swift > 문법' 카테고리의 다른 글
[Swift] Protocol 1) 기본 개념 (0) | 2021.08.18 |
---|---|
[Swift] 이니셜라이저(initalizer) / 참조타입에서의 사용 [3] (0) | 2021.08.15 |
[Swift] 이니셜라이저(initalizer) / 값타입에서의 사용 [2] (0) | 2021.08.14 |
[Swift] Class와 Struct에 대해서 알아보자. (0) | 2021.08.13 |
[Swift] Function inout parameter? (0) | 2021.08.12 |
Comments