본문 바로가기

swift

[swift] 클래스(class)

클래스 (class)

구조체는 값 타입인 반면에, 클래스는 참조 타입이다. swift의 클래스는 다중 상속이 되지 않는다. 

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

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

mutableReference.mutableProperty = 200
// mutableReference.immutableProperty = 200 -> 불변 프로퍼티라 값 변경 불가


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

// 클래스의 인스턴스는 참조 타입이므로 let으로 선언되었더라도 인스턴스 프로퍼티의 값 변경 가능
immutableReference.mutableProperty = 200
// immutableReference.immutableProperty = 200 -> 참조 타입이라도 불변 인스턴스는 값 변경 불가

// let으로 인스턴스 생성 시 참조정보를 변경할 수 없음
// immutableReference = mutableReference


// 타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod() // type method

// 인스턴스에서는 타입 프로퍼티나 타입 메서드 사용 불가
// mutableReference.typeProperty = 400
// mutableReference.typeMethod()

 

주의할 점

static func : 상속 시 재정의 불가

class func : 상속 시 재정의 가능 

 

클래스의 인스턴스는 참조 타입이므로, 인스턴스를 let으로 선언했더라도 프로퍼티 값 변경이 가능하다 ! 

다만 참조 정보를 변경할 수는 없음 

 

class Student {
    var name: String = "unknown" // 가변 프로퍼티
    var `class`: String = "Swift" // 가변 프로퍼티
    
    // 타입 메서드
    class func selfIntroduce() {
        print("학생타입입니다")
    }
    
    // 인스턴스 메서드
    func selfIntroduce() {
        print("저는 \(self.class)반 \(name)입니다")
    }
}

// 타입 메서드 사용
Student.selfIntroduce() // 학생타입입니다

// 인스턴스 생성
var yagom: Student = Student()
yagom.name = "yagom"
yagom.class = "스위프트"
yagom.selfIntroduce()   // 저는 스위프트반 yagom입니다

// 인스턴스 생성
let jina: Student = Student()
jina.name = "jina"
jina.selfIntroduce() // 저는 Swift반 jina입니다

 

 

 

 

 

 

[LECTURE] 14. 클래스 (💎생각해보기) : edwith

생각해보기   ▶'사람'을 나타내는 클래스를 만들어 봅시다. Hint 1 : 사람이 가질 수 있는 속성을 프로퍼티로, 사람이 할 수 있는 행동을 메서드로 구현할 수 있습니다. Hi... - 부스트코스

www.edwith.org

 

'swift' 카테고리의 다른 글

[swift] 값 타입 vs 참조 타입  (0) 2020.06.22
[swift] 열거형 (enum)  (0) 2020.06.22
[swift] 구조체 (struct)  (0) 2020.06.22
[swift] ARC | 약한참조 (weak)  (0) 2020.06.11
[swift] ARC | 강한참조 (Strong)  (0) 2020.06.11