iOS/Swift

클래스

밤새는 탐험가89 2024. 1. 17. 16:21

 

클래스 정의 

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