본문 바로가기
Swift/기본

클래스 (Class)

by 밤새는탐험가 2024. 4. 1.

정의 문법

클래스는 참조 타입이다. 

타입이름은 대문자 카멜케이스를 사용하여 정의한다. 

class 이름 {
	/* 구현부 */
}

 

 

프로퍼티 및 메서드 구현

클래스의 타입 메서드는 두 종류가 있다.

상속 후 재정의가 가능한 class 타입메서드, 

상속 후 재정의가 불가능한 static 타입메서드가 있다. 

 

class Sample {

    // 가변 프로퍼티
    var mutableProperty: Int = 100 

    // 불변 프로퍼티
    let immutableProperty: Int = 100 
    
    // 타입 프로퍼티
    static var typeProperty: Int = 100 
    
    // 인스턴스 메서드
    func instanceMethod() {
        print("instance method")
    }
    
    // 타입 메서드
    // 재정의 불가 타입 메서드 - static
    static func typeMethod() {
        print("type method - static")
    }
    
    // 재정의 가능 타입 메서드 - class
    class func classMethod() {
        print("type method - class")
    }
}

 

 

 

클래스 사용

// 인스턴스 생성 - 참조정보 수정 가능
var mutableReference: Sample = Sample()

mutableReference.mutableProperty = 300
print(mutableReference.mutableProperty)    // 300


/*
 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없다.
 
 mutableReference.immutableProperty = 500
 // change 'let' to 'var' to make it mutable
 */


// 인스턴스 생성 - 참조정보 수정 불가
let immutableReference: Sample = Sample()

// 클래스의 인스턴스는 let으로 선언되었어도, 프로퍼티의 값 변경이 가능
immutableReference.mutableProperty = 1000
print(immutableReference.mutableProperty)   // 1000


/*
 불변 인스턴스는 인스턴스 생성 후에 수정할 수 없다.
 
 immutableReference.immutableProperty = 2500
 // change 'let' to 'var' to make it mutable
 */

Sample.typeProperty = 600
Sample.typeMethod()    // type method - static

/*
 인스턴스에서는 타입 프로퍼티나 타입 메서드를 사용할 수 없다.
 */

 

 

 

과일 클래스 만들어보기 

class FruitInfo {
    
    // 가변 프로퍼티
    var name: String = "No Selected"
    
    // 가변 프로퍼티
    var price: Int = 0
    
    
    // 타입 메서드
    class func selfIntroduce() {
        print("과일 타입입니다.")
    }
    
    
    // 인스턴스 메서드
    // self는 인스턴스 자신을 지칭, 사용은 선택 사항
    func selfIntroduce() {
        print("과일 이름: \(self.name), 과일 가격: \(self.price)")
    }
}

// 타입 메서드 사용
FruitInfo.selfIntroduce()    // 과일 타입입니다.


// 인스턴스 생성
var apple: FruitInfo = FruitInfo()
apple.name = "사과"
apple.price = 2500
apple.selfIntroduce()    // 과일 이름: 사과, 과일 가격: 2500


// 인스턴스 생성
let kiwi: FruitInfo = FruitInfo()
kiwi.name = "키위"
kiwi.price = 4500
kiwi.selfIntroduce()   // 과일 이름: 키위, 과일 가격: 4500

 

구조체에서는 저렇게 치면 FruitInfo(name: , price: ) 도 뜨는데

클래스에서는 안뜨네?

 

 

'Swift > 기본' 카테고리의 다른 글

Class vs Struct / Enum  (0) 2024.04.03
열거형  (0) 2024.04.02
구조체 (Struct)  (0) 2024.04.01
옵셔널  (0) 2024.03.29
반복문  (0) 2024.03.26