클래스 정의
class 클래스 이름 {
프로퍼티와 메서드
}
클래스를 정의하는 것은 구조체와 비슷함
단, 클래스는 상속받을 수 있기 때문에,
클래스 이름 뒤에 콜론 (:)을 붙여 부모 클래스 이름을 명시
class 클래스 이름: 부모클래스 이름 {
프로퍼티와 메서드
}
FruitInfo 클래스 정의
class FruitInfo {
var name: String = ""
var price: Double = 0.0
}
클래스 인스턴스의 생성과 초기화
위에 정의한 FruitInfo 클래스에서는 프로퍼티의 기본값이 지정되어 있음
따라서 전달인자를 통해 초기값을 전달할 필요 없음
인스턴스가 생성 및 초기화 후 프로퍼티 값에 접근하려면?
마침표(.) 사용
구조체와 다르게 클래스는 let 으로 선언해도 내부 프로퍼티의 값 변경 가능
FruitInfo 클래스의 인스턴스 생성 및 사용
var appleInfo: FruitInfo = FruitInfo()
appleInfo.name = "Apple"
appleInfo.price = 2000
print("우리 사과는 \(appleInfo.name)이고, 가격은 \(appleInfo.price)원 입니다.")
// 우리 사과는 Apple이고, 가격은 2000.0원 입니다.
let bananaInfo: FruitInfo = FruitInfo()
bananaInfo.name = "Banana"
bananaInfo.price = 3500
print("우리 바나나는 \(bananaInfo.name)이고, 가격은 \(bananaInfo.price)원 입니다.")
// 우리 바나나는 Banana이고, 가격은 3500.0원 입니다.
bananaInfo.name = "맛 좋은 델몬트 바나나"
print("우리 사과는 \(bananaInfo.name)이고, 가격은 \(bananaInfo.price)원 입니다.")
// 우리 바나나는 맛 좋은 델몬트 바나나이고, 가격은 3500.0원 입니다.
클래스 인스턴스의 소멸
클래스의 인스턴스는 더 이상 참조할 필요가 없을 경우,
즉, 더 이상 사용하지 않을 경우에는 메모리에서 해제됨 = "소멸"
소멸되기 직전에 deinit이라는 메서드가 호출 (= "디이니셜라이저")
deinit은 클래스 당 1개만 구현
매개변수와 반환 값을 가질 수 없음
class FruitInfo {
var name: String = ""
var price: Double = 0.0
deinit {
print("FruitInfo 클래스의 인스턴스가 소멸됨 ")
}
}
var appleInfo: FruitInfo? = FruitInfo()
appleInfo?.name = "사과"
appleInfo?.price = 2000
appleInfo = nil // FruitInfo 클래스의 인스턴스가 소멸됨
★ 보통 deinit 메서드에는 인스턴스가 메모리에서 해제되기 직전에 처리할 코드 구현 ★
'iOS > Swift' 카테고리의 다른 글
프로퍼티 1편 (저장 프로퍼티) (0) | 2024.01.19 |
---|---|
구조체와 클래스의 차이 (0) | 2024.01.18 |
구조체 (0) | 2024.01.17 |
옵셔널 (0) | 2024.01.16 |
함수 3편 (중첩 함수) (1) | 2024.01.15 |