반응형
클래스와 구조체의 공통점
- 값을 정의하기 위한 프로퍼티 정의
- 기능을 정의하기 위한 메소드 정의
- subscript 정의
- 이니셜라이저 정의
- 기본 구현에서 기능 확장
- 프로토콜 제공
클래스만 가능한 기능
- 상속 : 클래스의 여러 속성을 다른 클래스에 물려 줌
- 타입 캐스팅 : 런타임에 클래스 인스턴스의 타입을 확인
- 소멸자 : 할당된 자원을 해제 시킴
- 참조 카운트 : 클래스 인스턴스에 하나 이상의 참조가 가능
선언 문법
class SomeClass {
// 클래스 내용은 여기에
}
struct SomeStructure {
// 구조체 내용은 여기에
}
예시
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution() // 위 Resolution 구조체를 값으로 사용
var interlaced = false
var frameRate = 0.0
var name: String?
}
인스턴스 생성
let someResolution = Resolution() // 구조체 인스턴스 생성
let someVideoMode = VideoMode() // 클래스 인스턴스 생성
프로퍼티 접근
print("The width of someResolution is \(someResolution.width)")
// "The width of someResolution is 0" 이 출력
구조체 멤버 초기화
let vga = Resolution(width: 640, height: 480)
구조체는 값 타입이다 !
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema.width = 2048
print("cinema is now \(cinema.width) pixels wide")
// "cinema is now 2048 pixels wide" 출력
print("hd is still \(hd.width) pixels wide")
// "hd is still 1920 pixels wide" 출력
위의 예시를 보면, hd는 초기에 주어진 1920가 출력되고, cinema.width는 새로 준 값인 2048이 출력된다.
--> 이 말은 서로 다른 공간에 저장되어 있다는 소리 !
클래스는 참조 타입이다 !
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// "The frameRate property of tenEighty is now 30.0" 출력
초기에 tenEighty.framRate를 25.0으로 선언해주었다. 이후에 만든 상수의 frameRate를 30.0으로 선언해주었다.
이후에 tenEighty의 frameRate를 출력해보면 30.0으로 출력이 된다.
--> 이 말은 서로 같은 공간에 저장이 되있다. 즉, class는 주소를 참조한 것이다.
클래스와 구조체를 사용할 때의 판별
- 구조체의 주 목적이 관계된 간단한 값을 캡슐화(encapsulate) 하기 위한 것인 경우 // 간단하게 사용할 경우
- 구조체의 인스턴스가 참조되기 보다, 복사되길 원하는 경우
- 구조체에 의해 저장된 어떠한 프로퍼티가 복사되길 원하는 경우
- 구조체가 프로퍼티 or 메소드를 상속할 필요가 없는 경우
반응형
'iOS & Swift' 카테고리의 다른 글
[Swift] Swift 공식문서 정리 - 5(옵셔널 체이닝) (0) | 2022.04.06 |
---|---|
[Swift] Swift 공식문서 정리 - 4(열거형) (0) | 2022.04.06 |
[Swift] Swift 공식문서 정리 - 2(제어문, 함수) (0) | 2022.03.29 |
[Swift] Swift 공식문서 정리 - 1(기본연산자, 문자열, 콜렉션 타입) (0) | 2022.03.29 |
[iOS] Key-Chain이란? (0) | 2022.03.26 |