1. 클래스(class)란?
클래스는 "참조(reference) 타입" 이다.
클래스는 값 타입인 구조체와 달리 참조 타입인데 그럼 참조 타입이란?
값 타입은 데이터를 전달할 때 원본을 복사해서 전달했기 때문에 메모리 공간을 공유했지만
참조 타입은 데이터를 전달할 때 값의 메모리 위치를 전달한다.
타입 이름은 대문자 카멜케이스를 사용한다.
스위프트에서 클래스는 다중 상속이 되지 않는다.
스위프트에서 상속은 클래스 프로토콜 등에서 가능하고 열거형, 구조체는 상속이 불가능하다.
그리고 스위프트는 다중 상속을 지원하지 않는다는 점을 알아두자.
2. 클래스 문법 및 사용
클래스는 다음과 같이 사용할 수 있다.
class 이름 {
구현부
}
구조체와 다르지 않아 보인다. 구조체는 struct 로 정의하고 클래스는 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("print method - static")
}
// 클래스 메서드 , 재정의 가능
class func classMethod() {
print("type method - class")
}
}
구조체를 사용할 때와 비슷하게 Sample 이란 클래스를 만들었고 그 안에 프로퍼티와 메서드를 생성했다.
그리고 만든 클래스를 통해 인스턴스를 생성할 수 있다.
// 인스턴스 생성 - 참조정보 수정 가능
var mutableReference: Sample = Sample()
가변 인스턴스를 생성하고 인스턴스 내의 프로퍼티 값을 변경할 수 있다.
mutableReference.mutableProperty = 200
// 컴파일 오류 발생
//mutableReference.immutableProperty = 200
구조체와 같이 가변 프로퍼티는 변경 가능하지만 불변 프로퍼티는 변경할 수 없다.
그리고 불변 인스턴스를 생성해봤다.
let immutableReference: Sample = Sample()
그리고 가변 프로퍼티의 값을 변경해보았는데
immutableReference.mutableProperty = 200
// 컴파일 에러 발생
//immutableReference.immutableProperty = 200
구조체와 다르게 불변 인스턴스 내의 가변 프로퍼티의 값을 변경할 수 있었다.
물론 불변 프로퍼티는 변경이 불가했다.
Sample.typeProperty = 300
Sample.typeMethod()
그리고 구조체와 같이 타입 프로퍼티와 타입 메서드는 클래스 자체에서만 사용할 수 있었다.
정리하기
지난 시간에 구조체에서 배우고 오늘은 클래스에 대해서 배웠다.
문법과 사용하는 부분에 있어서는 특별히 다르게 쓰이는 점은 없다고 생각한다.
다만 타입이 다르고 불변 인스턴스에서 가변 프로퍼티의 값을 설정할 수 있다는 부분 말고는 거의 비슷했다.
정확히 구조체와 클래스는 어떤 차이가 있는지 알아두면 좋을 것 같다.
- 참고 사이트 -
www.edwith.org/boostcamp_ios/lecture/11272
edu.goorm.io/learn/lecture/1141/야곰의-스위프트-프로그래밍/lesson/43397/값-타입과-참조-타입
'iOS > Swift' 카테고리의 다른 글
[Swift] 15. 열거형(enum) 기본 (0) | 2020.10.26 |
---|---|
[Swift] 14. 구조체와 클래스 비교하기 (0) | 2020.10.20 |
[Swift] 12. 구조체(struct) 기본 (0) | 2020.10.18 |
[Swift] 11. 옵셔널 추출 (Optional Unwrapping) (0) | 2020.10.08 |
[Swift] 10. 옵셔널 (Optional) (0) | 2020.09.23 |