🦜 Swift

[Swift] 클래스

ji-hyun 2022. 11. 19. 21:54

클래스와 구조체는 매우 유사하지만 차이점은 구조체는 값 타입인 반면 클래스는 참조 타입이다. 

 

 

값 타입과 참조 타입

값 타입은 상수나 변수에 할당하거나 함수에 넘겨질 때 복사가 됩니다. 값 타입과는 다르게 참조 타입은 변수나 상수에 할당하거나 함수에 넘길 때 복사하지 않습니다. 복사 대신에 기존에 같은 인스턴스에 참조가 사용됩니다. 즉 값이 복사되는 것이 아니라 메모리를 참조하는 것입니다!

 

 

그래서 클래스는 객체를 만들고 프로퍼티 접근해서 값을 변경하면 그 프로퍼티 값이 다 변경된다. 

다시 말해 메모리를 참조하기 때문

 

 

그리고 Swift 의 클래스는 다중 상속이 안된다는 점을 기억하자.

 

 

 

 

클래스 예제를 보자

 

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


let x: Sample = Sample()
Sample.typeMethod()
// x.typeMethod() //  <-- error
Sample.classMethod()
// x.classMethod() // <-- error
x.instanceMethod()

 

 

 

 

 

 

 

구조체와 또 다른 점은

 

 

 

var 와 let 으로 선언한 변수와 상관없이

immutableReference.mutableProperty 를 바꿀 수 있다.

 

 

 

'🦜 Swift' 카테고리의 다른 글

[Swift] 클로저  (0) 2022.11.20
[Swift] 열거형  (0) 2022.11.19
[Swift] 구조체  (0) 2022.11.19
[Swift] if let vs guard let  (0) 2022.11.19
[Swift] guard let  (0) 2022.11.19