[Swift] 구조체와 클래스

선주·2022년 3월 31일
0

Swift

목록 보기
2/20
post-thumbnail

Swift에서는 대부분의 타입이 구조체로 이루어져 있으므로 중요!

📌 구조체

struct Sample {
    var mutableProperty: Int = 100 // 가변 프로퍼티
    let immutableProperty: Int = 100 // 불변 프로퍼티
    
    static var typeProperty: Int = 100 // 타입 프로퍼티
    
    func instanceMethod() { // 인스턴스 메서드
        print("instance method")
    }
    
    static func typeMethod() { // 타입 메서드
        print("type method")
    }
}

static 키워드를 앞에 붙여주면 Sample 타입 자체에서만 사용할 수 있는 타입 프로퍼티이고, static 안 붙여있는 프로퍼티는 인스턴스 프로퍼티이다.


구조체 사용

  • mutable의 경우 var로 선언되었기 때문에 내부 프로퍼티의 값을 변경할 수 있다. 단, immutableProperty처럼 프로퍼티 선언부 자체에서 불변으로 선언된 프로퍼티의 경우는 값을 변경할 수 없다.
// 가변 인스턴스
var mutable: Sample = Sample()

mutable.mutableProperty = 200
// mutable.immutableProperty = 200 → 에러

dump(mutable)
// - mutableProperty: 200
// - immutableProperty: 100

  • immutable은 let으로 선언되었기 때문에 아무리 내부에서 가변 프로퍼티로 선언되었다 하더라도 프로퍼티의 값을 변경할 수 없다.
// 불변 인스턴스
let immutable: Sample = Sample()

// immutable.mutableProperty = 200 → 에러
// immutable.immutableProperty = 200 → 에러

  • 타입 프로퍼티는 타입 자체만 사용할 수 있고, mutable같은 인스턴스에서는 사용할 수 없다.
// 타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod()

// mutable.typeProperty = 400 → 에러
// mutable.typeMethod() → 에러

클래스는 구조체와 유사한 개념이지만, 구조체가 값 타입이라면 클래스는 참조(reference) 타입이라는 점에서 차이를 갖는다. Swift의 클래스는 다중상속이 불가능하다.


📌 클래스

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로 선언하든 let으로 선언하든 키워드에 상관 없이 Sample 클래스의 가변 프로퍼티를 변경할 수 있다. 불변 프로퍼티는 물론 값 변경이 불가능하다.

// 인스턴스 생성 - 참조정보 수정 가능
var mutableReference: Sample = Sample()
mutableReference.mutableProperty = 200
// mutableReference.immutableProperty = 200 → 에러

// 인스턴스 생성 - 참조정보 수정 불가
let immutableReference: Sample = Sample()
immutableReference.mutableProperty = 200
// immutableReference.immutableProperty = 200 → 에러


야곰의 스위프트 기본 문법 강좌를 수강하며 작성한 내용입니다.

profile
기록하는 개발자 👀

0개의 댓글