Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다트기본문법
- 스위프트개발
- 다트
- robotframework
- qaautomation
- 테스트자동화
- 오블완
- 플러터
- SWIFT
- Swift5
- playwright
- 다트언어
- testautomation
- 테스트오토메이션
- 티스토리챌린지
- 스위프트프로그래밍
- 다트기초문법
- 스위프트
- 로봇프레임워크
- iOS프로그래밍
- Python
- Flutter
- dartlang
- 야곰스위프트
- ios개발
- DART
- pythonautomation
- 테킷앱스쿨
- QA자동화
- 파이썬자동화
Archives
- Today
- Total
day_by_day
11. 인스턴스 생성 및 소멸 본문
11.1 인스턴스 생성
- 스위프트의 이니셜라이저는 직접 구현할 수 있으며 반환값이 없음
- 이니셜라이저는 func 키워드를 사용하지 않고 init 키워드를 사용하여 이니셜라이저 메서드임을 표현
11.1.1 프로퍼티 기본값
- 구조체와 클래스의 인스턴스는 처음 생성할 때 옵셔널 저장 프로퍼티를 제외한 모든 저장 프로퍼티에 적절한 초기 값을 할당해야 함
- 이니셜라이저가 실행될 때 저장 프로퍼티에 값을 할당할 수 있음
- 이니셜라이저를 통해 초기값을 할당하거나 프로퍼티 기본값을 통해 처음 저장 프로퍼티가 초기화 될 때는 프로퍼티 감시자 메서드가 호출되지 않음
11.1.2 이니셜라이저 매개변수
- 이니셜라이저도 매개변수를 가질 수 있음
- 여러 종류의 이니셜라이저를 만들 수 있음
struct Area {
var squareMeter: Double
init(fromPy py: Double) {
squareMeter = py * 3.3
}
init(fromSquareMeter squareMeter: Double){
self.squareMeter = squareMeter
}
init(value: Double){
squareMeter = value
}
init(_ value: Double){
squareMeter = value
}
}
11.1.3 옵셔널 프로퍼티 타입
- 초기화 과정에서 값을 지정해주기 어려운 경우 프로퍼티를 옵셔널로 선언하여 사용
- 옵셔널로 선언한 저장 프로퍼티는 초기화 과정에서 자동으로 nil할당
11.1.4 상수 프로퍼티
- 상수로 선언된 저장 프로퍼티는 인스턴스를 초기화 하는 과정에서만 값을 할당할 수 있음
- 처음 할당 이후로는 값을 변경할 수 없음
- 클래스 인스턴스의 상수 프로퍼티는 프로퍼티가 정의된 클래스에서만 초기화 할 수 있음
- 해당 클래스를 상속받은 자식 클래스의 이니셜라이저에서는 부모클래스의 상수 프로퍼티 값을 초기화 할 수 없음
11.1.5 기본 이니셜라이저와 멤버와이즈 이니셜라이저
- 기본이니셜라이저는 저장 프로퍼티의 기본값이 모두 지정되어 있고, 동시에 사용자 정의 이니셜라이저가 정의되어 있지 않은 상태에서 제공됨
- 구조체는 사용자 정의 이니셜라이저를 구현하지 않으면 프로퍼티의 이름으로 매개변수를 갖는 이니셜라이저인 멤버 와이즈 이니셜라이저를 기본으로 제공
- 클래스는 멤버와이즈 이니셜라이저를 지원하지 않음
struct Point {
var x: Double = 0.0
var y: Double = 0.0
}
let point: Point = Point(x:10, y:30)
print(point)
11.1.6 초기화 위임
- 구조체와 열거형은 코드중복을 피하기 위해 이니셜라이저가 다른 이니셜라이저에게 일부 초기화를 위임할 수 있음
- 클래스는 상속때문에 사용할 수 없음
- 이니셜라이저가 다른 이니셜라이저를 호출할 때 self.init을 사용
- 사용자 정의 이니셜라이저를 만들 때는 최소 2개 이상의 이니셜라이저가 필요
enum Student {
case elementary, middle, high
case none
//사용자 정의 이니셜라이저가 있는경우, init() 메서드를 구현해주어야 기본이니셜 라이저 사용 가능
init() {
self = .none
}
init(koreanAge: Int){
switch koreanAge {
case 8...13:
self = .elementary
case 14...16:
self = .middle
case 17...19:
self = .high
default :
self = .none
}
}
init(bornAt: Int, currentYear: Int){
self.init(koreanAge: currentYear - bornAt + 1)
}
}
11.1.7 실패 가능한 이니셜라이저
- 이니셜라이저의 전달인자로 잘못된 값이나 적절치 못한 값이 전달되었을 때 등 초기화가 실패할 수 있음
- 실패가능한 이니셜라이저: 초기화 실패가능성을 내포한 이니셜라이저
- 실패 시 nil을 반환하므로 init? 을 사용
- 실제 값을 반환하는 것이 아니라 return을 적어 성공과 실패를 표현하는 것 뿐임
class Person {
let name: String
var age: Int?
init?(name: String){
if name.isEmpty {
return nil
}
self.name = name
}
init?(name: String, age: Int){
if name.isEmpty || age < 0 {
return nil
}
self.name = name
self.age = age
}
}
11.1.8 함수를 사용한 프로퍼티 기본값 설정
진짜 머르겠넹 .. 담에 다시 공부!!
11.2 인스턴스 소멸
- 클래스의 인스턴스는 디이니셜라이저 구현 가능
- deinit 키워드 사용
- 클래스에서만 구현할 수 있음
- 사용 예) 인스턴스 내부에서 파일을 불러와 열어보는 등 외부 자원을 사용했다면 인스턴스 소멸 전 파일을 저장하고 닫아주는 등 부가 작업이 필요
- 매개변수를 가질 수 없으며 소괄호도 적지 않음
'QA Automation > swift5' 카테고리의 다른 글
13. 클로저 (0) | 2023.06.21 |
---|---|
12. 접근제어 (0) | 2023.06.21 |
10. 프로퍼티와 메소드 (0) | 2023.06.21 |
9. 구조체와 클래스 (0) | 2023.06.21 |
8. 옵셔널(Optional) (0) | 2023.06.20 |