[Swift] (기초) Class / 클래스

2021. 7. 16. 22:05🍏/Swift 기초 공부

클래스
struct와 유사하지만 참조타입이며 다중상속 불가능

import Swift

//MARK: - 정의
//class 이름{
//
//}

// 참조타입
// 다중상속 불가능

class Sample {
    var mutableProperty: Int = 100      // 가변 프로퍼티
    let immutableProperty: Int = 100    // 불편 프로퍼티
    
    static var typeProperty: Int = 100  // 타입 프로퍼티

    // 인스턴스 메서드
    func instanceMethod() {
        print("instace method")
    }

    // 타입 메서드
    // 재정의 불가 타입 메서드 - static
    static func typeMethod(){
        print("type method - static")
    }
    
    // 재정의 가능 타입 메서드 - class
    class func classMethod() {
        print("type method - class")
    }
}

//MARK: 클래스 사용

// 가변 인스턴스
var mutable: Sample = Sample()

mutable.mutableProperty = 200
/* mutable.immutableProperty = 200 */ //불변 프로터티는 값을 변경할 수 없다.

// 불변 인스턴스
let immutable: Sample = Sample()

immutable.mutableProperty = 200
/*immutable.immutableProperty = 200 */ //불변 인스턴스도 가변 프로퍼티는 값 변경 가능하다.

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


/* mutable.typeProperty = 400
mutable.typeMethod() */ // 타입프로퍼티 & 타입 메서드 사용 불가능

//MARK: - 학생 클래스

class Student {
    var name: String = "unknown"
    var `class`: String = "Swift"

    static func selfIntroduce(){
        print("학생 타입 입니다.")
    }
    
    func selfIntroduce(){
        print("저는 \(self.class)반 \(name)입니다 ")
    }
}

Student.selfIntroduce() // 학생 타입입니다.

var chan: Student = Student()
chan.name = "chan"
chan.class = "스위프트"
chan.selfIntroduce()    //저는 스위프트반 찬입니다.

let kanna: Student = Student()
// 불변 인스턴스도 가변 프로퍼티값을 변경 가능
kanna.name = "kanna"

kanna.selfIntroduce() //저는 swift반 kanna입니다