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
반응형
'Language > 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 |