SWIFT 문법 정리 -2
구조체와 클래스
- 구조체 / 클래스
struct 구조체 이름 {
프로퍼티와 메서드들
}
class 클래스 이름 {
프로퍼티와 메서드들
}
- 인스턴스 생성
let structInstance = 구조체()
let classInstance = 클래스()
- struct
- class

구조체와 클래스의 차이점
- 구조체는 값 타입, 클래스는 참조 타입
- 구조체는 상속할 수 없다.
- 타입캐스팅은 클래스의 인스턴스에만 허용된다. (상위 또는 하위 클래스 타입으로 형변환 가능)
- 디이녈라이저는 클래스의 인스턴스에만 활용할 수 있다.
- 참조 횟수 계산은 클래스의 인스턴스에만 적용된다.

초기화 구문 init
- 클래스 구조체 또는 열거형의 인스턴스를 사용하기 위한 준비 과정

- init을 통해 이렇게 초기값 직접 지정 가능하다
deinit이란?
Deinitialization: 소멸자
소멸자는 클래스 인스턴스가 메모리에서 해제될때 즉시 호출되는 함수이다.
swift의 소멸자는 deinit 키워드를 이용해 사용할 수 있다. 작성방식은 init과 비슷하다!
swift의 소멸자는 구조체가 아닌 클래스 타입에서만 작성이 가능하다.
소멸자가 호출되기 전까지 인스턴스는 메모리에서 해제되지 않기 때문에 소멸자는 호출되는 인스턴스의 모든 프로퍼티에 접근이 가능하다.
또한 해당 프로퍼티들에 기반한 행위의 변경 또한 가능하다.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
deinit {
print("deinit person class instance")
}
}
// init call
var zehye = Person(name:"zehye", age: 20)
// deinit call
zehye = nil
- zehye는 Person 클래스의 인스턴스다.
- 인스턴스 생성 후 해당 인스턴스에 nil을 할당함으로써 메모리를 해제한다.
- nil을 할당하면 deinit 소멸자가 호출된다.
- deinitd에 구현해놓은 print()가 호출된다.
- 콘손에 해당 문구가 출력된다.
프로퍼티
Swift에서 사용하는 프로퍼티 종류
- 저장 프로퍼티
- 연산 프로퍼티
- 타입 프로퍼티
저장 프로퍼티
- 인스턴스의 변수 또는 상수
- 구조체, 클래스에서만 쓰임
- 프로퍼티 감지사 적용 가능
- 프로퍼티의 값이 새로 할당될 때마다 호출됨
- 지연 저장 프로퍼티에 사용할 수 없고, 일반 저장 프로퍼티에만 적용 가능
- 변경되는 값이 현재의 값과 같더라도 호출됨
- 값이 변경되기 직전에 호출하는 메서드 willSet메서드 + newValue 변경될 값
- 값이 변경된 직후에 호출되는 didSet 메서드 + oldValue 변경되기 전의 값
- 간단하게 저장프로퍼티에 값이 저장되는 걸 저장 프로퍼티 라고 한다.
- struct같은 경우 let으로 선언된 객체는 변경 안됨!! 하지만 class는 가능
ㅁ Struct : value타입 / Class : 참조타입
연산 프로퍼티
- 값을 저장하는 것이 아니라 특정 연산을 실행한 결괏값
- 클래스, 구조체, 열거형에서 쓰임
- set 관용적인 표현으로 newValue 매개변수 이름을 사용. 매개변수는 따로 표기하지 않아야 함
- 읽기 전용 연산 프로퍼티는 가능하나, 쓰기 전용 연산 프로퍼티는 불가능
이와같이 출력 된다.
타입 프로퍼티
- 특정 타입에 사용됨
- JAVA 언어의 static, C언어의 const static과 유사
'IOS > 정리(IOS)' 카테고리의 다른 글
IOS) SWIFT UI 탐색 해보기 (0) | 2022.09.14 |
---|---|
SWIFT 문법 정리 - 3 (0) | 2022.09.13 |
SWIFT 문법 정리 - 1 (1) | 2022.09.10 |