Swift - 클래스(Class)

2023. 12. 5. 19:30·Study/Swift
728x90
반응형

1. 클래스란 무엇일까?

클래스는 참조(reference) 타입이다.

이름은 파스칼 케이스로 작성한다.

클래스는 다중 상속이 불가능하다.

 

2. 클래스 관련 문법

클래스를 선언할 때는 class 키워드를 사용한다.

 

class 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")
    }
    
    // 타입 메서드
    class func classMethod() {
        print("type method - class")
    }
}

 

이전 글에서 적었던 구조체와 상당히 비슷한 모양을 가지고 있다.

 

프로퍼티나 인스턴스 메서드 선언은 같지만 class 키워드를 가진 타입 메서드가 추가되었는데,

이는 상속 시 재정의가 가능한 타입 메서드이다.

 

반대로 static 키워드가 있는 타입 메서드는 상속 시 재정의가 불가능하다.

 

 

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

mutableReference.mutableProperty = 200

// 컴파일 오류
//mutableReference.immutableProperty = 200


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

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

// 컴파일 오류
//immutableReference = mutableReference

// 컴파일 오류
//immutableReference.immutableProperty = 200


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

// 컴파일 오류
//mutableReference.typeProperty = 400
//mutableReference.typeMethod()

 

여기서도 간단히 구조체와 비교해보면

동일한 점은 var, let으로 인스턴스를 생성했을 때 불변 프로퍼티 값은 변경할 수 없다.

 

하지만, 클래스의 인스턴스는 참조 타입이므로(정말 자바, 코틀린의 클래스처럼)

let으로 선언되었더라도 가변 프로퍼티 값을 변경할 수 있다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Study > Swift' 카테고리의 다른 글

Swift - Class, Struct, Enum 비교하기  (0) 2024.05.13
Swift - 열거형(Enum)  (0) 2024.05.12
Swift - 구조체(Struct)  (0) 2023.12.04
Swift - 옵셔널(Optional)  (0) 2022.09.22
Swift - 반복문 (for-in, while, repeat-while)  (0) 2022.09.21
'Study/Swift' 카테고리의 다른 글
  • Swift - Class, Struct, Enum 비교하기
  • Swift - 열거형(Enum)
  • Swift - 구조체(Struct)
  • Swift - 옵셔널(Optional)
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237) N
      • Dev experience (85)
        • Android (84)
        • Kotlin (1)
      • Study (62) N
        • Kotlin (26) N
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Material
    코루틴
    배열
    CodeLab
    코틀린
    안드로이드
    databinding
    coroutines
    PCCE
    viewModelScope
    programmers
    ios
    android
    jetpack
    daterangepicker
    Java
    LiveData
    오블완
    Kotlin
    티스토리챌린지
    프로그래머스
    room
    getNumericValue
    MVVM
    스위프트
    자바
    aac
    ViewModel
    SWIFT
    Observer
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Swift - 클래스(Class)
상단으로

티스토리툴바