일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 패스트캠퍼스
- 자바스크립트
- 직정인자기계발
- 패캠reactnative
- 패캠인강후기
- 수강료0원챌린지
- 패스트캠퍼스후기
- reactnative강의
- 직장인자기계발
- 자바
- 오공완
- 패캠
- 직장인공부
- 직장인인강
- 환급챌린지
- 코딩자격증
- 코딩교육
- 30개프로젝트로배우는iOS앱개발withSwift초격차패키지Online.
- 파이썬
- 패캠강의후기
- 코딩테스트
- 패캠챌린지
- fastcampus
- Today
- Total
라티의 작은 일기장
[4일차] 초기화 구문 init() 본문
오늘 공부할 내용은 어제 공부했던 클래스 정의문 내 init()에 관한 것이다.
어제 Dog 클래스를 정의했던 코드를 보면 다음과 같다.
class Dog {
var name: String = ""
var age: Int = 0
init() {
}
func intro() {
print("name: \(name), age: \(age)")
}
}
init()에 중괄호 쌍만 붙여놓고 아무것도 하지 않았지만, Dog 클래스의 인스턴스 생성 후에 멤버 변수에 접근하여 값을 변경할 수 있었다.
오늘은 이렇게 아무것도 작성하지 않은 init()의 내용을 채워볼 것이다.
초기화(Initialization)?
클래스 구조체 또는 열거형의 인스턴스를 사용하기 위한 준비 과정이다.
Swift에서 의미를 다시 알아보니까 새롭게 느껴질 법도 하지만, 사실 Java를 공부한 사람이라면 init()이 객체의 생성자 함수(Initializer)와 같은 용도로 쓰인다는 것을 짐작할 수 있을 것이다.
즉 Swift에서 init() 또한 새롭게 생성한 인스턴스의 프로퍼티(멤버 변수 or 함수)마다 초기값을 설정하기 위해 필요하다.
그럼 이제 초기화 구문의 기본 형태를 알아보자.
init(매개변수: 타입, ...) {
프로퍼티 초기화
인스턴스 생성시 필요한 설정을 해주는 코드 작성
}
기본 형태는 다음과 같다.
init 키워드 옆 소괄호 쌍 안에 매개변수 이름과 타입을 지정해줌으로써 초기화할 프로퍼티를 명시할 수 있고, 중괄호 내부에는 프로퍼티 초기화를 위한 코드와 인스턴스 생성시 필요한 설정을 해주는 코드를 자유롭게 작성할 수 있다.
여기서 특이한 점은, 매개변수의 이름을 다르게 설정한다면, 여러 개의 init()함수를 활용할 수도 있다.
예시를 한 번 살펴보자.
class Cat {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
어제는 강아지로 공부했으니 오늘은 고양이 클래스를 정의해보았다.
또한 위에서 다룬 init()의 기본 형태에 따라 매개변수로 넘겨받은 값으로 프로퍼티를 초기화하는 코드 또한 작성하였다.
그리고 Playground에서 클래스 인스턴스를 생성하고 init()의 매개변수로 값을 전달해서 프로퍼티를 초기화한 뒤, 그것을 확인해보았다.
예상대로 매우 잘 초기화되는 것을 알 수 있다.
그런데 굳이 매개변수를 통해 값을 받지 않아도, init() 함수 안에서 자체적으로 프로퍼티를 초기화 할 수도 있다.
그것을 확인하려면 역시 init()을 위 Cat 클래스에 하나 더 정의해보는게 빠르다.
class Cat {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
init(age: Int) {
self.name = "Haru"
self.age = age
}
}
고양이의 나이에 대한 매개변수만 받도록 하고, 그런 경우 생성된 클래스 인스턴스의 name 프로퍼티 값은 Haru가 되도록 하였다.
실행 결과는 다음과 같다.
이번에도 예상대로 name은 Haru로, age는 7로 잘 초기화되었음을 확인할 수 있었다.
마지막으로, 클래스 인스턴스가 반환되기 전에 인스턴스에 할당되어있던 리소스 등을 정리하는 기능을 구현하기 위해 존재하는 init()의 반대 메소드를 알아보자.
초기화 해제(Deinitialize)?
우선 클래스 인스턴스에만 존재하고 있고, 용도는 이미 작성한 것 처럼 메모리에 올라와있는 클래스 인스턴스가 해제되기 직전에 호출되어, 해당 인스턴스와 관련된 여러 정리 작업을 수행하기 위해 만들어진 메소드이다.
구현과 사용법에 대해 알아보자.
class Cat {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
init(age: Int) {
self.name = "Haru"
self.age = age
}
deinit {
print("deinit cat")
}
}
매우 간단하게도, deinit 키워드와 중괄호 한 쌍 안에 원하는 작업을 위한 코드를 작성하는 것으로 초기화 해제 메소드는 구현이 끝난다.
간단하게 사용법을 테스트하기 위해, cat3 인스턴스를 생성하고 해당 인스턴스를 메모리에서 해제시켜보았다.
"deinit cat"이라는 문자열이 잘 출력되었다.
패스트캠퍼스 바로가기 : http://bit.ly/3Y34pE0
> 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Swift' 카테고리의 다른 글
[6일차] 상속 (0) | 2023.02.25 |
---|---|
[5일차] 프로퍼티 (0) | 2023.02.24 |
[3일차] 구조체와 클래스 (0) | 2023.02.22 |
[2일차] 옵셔널과 옵셔널 바인딩 (0) | 2023.02.21 |
[1일차] Swift 기본 문법 공부 및 첫인상 (0) | 2023.02.20 |