728x90
반응형
스위프트에서는 구조체와 클래스의 모습과 문법이 거의 흡사하다. 프로퍼티, 메서드, 이니셜라이저 정의가 가능하고 그 밖에도 여러 공통점이 존재한다.
하지만 차이점도 분명 존재하며, 이 둘을 구분하는 가장 큰 차이점은
- 구조체의 인스턴스 -> 값 타입
- 클래스의 인스턴스 -> 참조 타입 (포인터와 유사한 개념)
이라고 볼 수 있다.
추가적인 차이점들은 다음과 같다.
- 구조체는 상속할 수 없다.
- 타입캐스팅은 클래스의 인스턴스에만 허용된다.
- 디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있다.
- 참조 횟수 계산은 클래스의 인스턴스에만 적용된다.
[ 구조체 ]
스위프트에서는 대부분의 타입이 구조체로 이루어져 있을 정도로 구조체가 중요한 역할을 담당한다.
struct 이름 {
구현부
}
// [ 구조체 선언 ]
struct Sample {
var mutableProperty: Int = 100 // 가변 프로퍼티 (인스턴스 프로퍼티)
let immutableProperty: Int = 100 // 불변 프로퍼티 (인스턴스 프로퍼티)
static var typeProperty: Int = 100 // 타입 프로퍼티 (구조체 Sample 자체의 프로퍼티)
// 인스턴스 메서드
func instanceMethod() {
print("instance method")
}
// 타입 메서드
static func typeMethod() {
print("type method")
}
}
// [ 구조체 사용 ]
// 가변 인스턴스
var mutable: Sample = Sample()
mutable.mutableProperty = 200 // 내부 프로퍼티 값 변경 가능
//mutable.immutableProperty = 200 // 얘는 불변 프로퍼티라 변경 불가능
// 불변 인스턴스
let immutable: Sample = Sample()
//immutable.mutableProperty = 200 // 가변 프로퍼티라해도 불변 인스턴스의 프로퍼티는 값 변경 불가능
// 타입 프로퍼티 및 메서드 (Sample이라는 타입 자체에서 사용할 수 있는 프로퍼티와 메서드)
Sample.typeProperty = 300
Sample.typeMethod()
// 인스턴스에서는 타입 프로퍼티&메서드 사용 불가
//mutable.typeProperty = 400
//mutable.typeMethod()
[ 클래스 ]
구조체는 값 타입, 클래스는 참조 타입이다.
스위프트의 클래스는 다중상속이 되지 않는다.
class 이름 {
구현부
}
클래스에서는 타입 메서드가 2가지로 나뉜다.
- 이후 상속 시 재정의가 불가능한 static 메서드
- 이후 상속 시 재정의가 가능한 class 메서드
그리고 클래스는 사용 시에 불변 인스턴스라도 프로퍼티가 가변 프로퍼티라면 값 변경이 가능하다. (구조체는 불변 인스턴스라면 프로퍼티 변경 불가)
// [ 클래스 선언 ]
class Sample {
var mutableProperty: Int = 100 // 가변 프로퍼티 (인스턴스 프로퍼티)
let immutableProperty: Int = 100 // 불변 프로퍼티 (인스턴스 프로퍼티)
static var typeProperty: Int = 100 // 타입 프로퍼티 (구조체 Sample 자체의 프로퍼티)
// 인스턴스 메서드
func instanceMethod() {
print("instance method")
}
// 타입 메서드
// 재정의 불가 타입 메서드 - static
static func typeMethod() {
print("type method - static")
}
// 재정의 가능 타입 메서드 - class
class func classMethod() {
print("type method - class")
}
}
// [ 클래스 사용 ]
var mutableReference: Sample = Sample()
mutableReference.mutableProperty = 200
let immutableReference: Sample = Sample()
immutableReference.mutableProperty = 200 // 클래스에서는 불변 인스턴스라도 가변 프로퍼티 값은 변경 가능하다.
728x90
반응형
'Swift' 카테고리의 다른 글
[ Swift ] Swift 기초 문법7 - 값 타입과 참조 타입 (클래스, 구조체, 열거형 비교) (0) | 2023.01.30 |
---|---|
[ Swift ] Swift 기초 문법6 - 열거형 (0) | 2023.01.30 |
[ Swift ] Swift 기초 문법4 - 옵셔널 (0) | 2023.01.28 |
[ Swift ] Swift 기초 문법3 - 조건문, 반복문 (0) | 2023.01.28 |
[ Swift ] Swift 기초 문법2 - 함수 (0) | 2023.01.28 |