1. Swift의 구조적 이점
- 속도 : 값타입은 시스템 리소스를 적게 먹는다
- 안정성 : 구조체는 근본적으로 기본값을 변형 시킬수 없기 때문에 코딩시에 안전한 코딩을 할수있다.
2. Class와 Struct의 차이점
import UIKit
class ViewController: UIViewController {
}
위 코드는 iOS 개발을 할때 가장 흔하게 볼수 있는 코드이다. 처음 시작할때는 그냥 이렇게 하는구나 라고만 생각했는데 블로그 내용을 보고 쉽게 구조를 파악할수 있어서 한번 정리하게 되었다.
- Class
- class로 선언된 ViewController는 UIViewController를 상속받는 것을 볼수있다.
- 상속 받는다는 것의 의미는 부모클래스에 있는 기능들을 자식클래스에서 쓸 수 있다는 것이다
- 만약 iOS가 Struct구조 였다면 이렇게 쓸수 없다 (상속 불가능 하기 때문)
- 최적용도
- 구조체의 주목적이 몇몇 연관성있는 간단한 데이터 값의 캡슐화일 경우
- 캡슐화된 값들이 그 구조체의 인스턴스가 할당될때나 전달될때 참조보다는 복사가 예상될 경우
- 구조체에 저장되는 모든 프로퍼티들이 참조보다는 복사가 예상되는 값형식일 경우
- 구조체가 다른 형(type)에서부터 프로퍼티나 기능이 상속될 필요가 없을 경우
- 실질적으로 대부분의 사용자 데이터 형은 구조체가 아닌 클래스로 정의됨
-
Struct
그러면 큰 뼈대를 담당하고 있다는 말은 무엇일까
우리가 선언할때 자주 쓰이는 타입들의 정의는 구조체로 구현되어있다
public struct Int : SignedInteger, Comparable, Equatable
public struct Double
public struct String
- : 뒤에 나오는 SignedInteger, .. 같은 경우는 프로토콜 이라고 볼수있다
- 설명하자면 : 뒤에 있는 내용을 채택 하겠다 와 같은 것이다.
- 최적용도
- 참조가 아닌 복사를 원할 때
- 자신을 상속할 필요가 없거나 자신이 다른타입을 상속받을 필요가 없을때
- 연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶을때
3. Class와 Struct의 공통점
- 서로 다른 타입(자료형)들을 하나로 묶을 수 있다.
- 이러한 묶은 자료형들을 새로운 타입처럼 사용 가능하다
- 클래스/구조체 안에서 함수/프로퍼티 정의 가능
- extension 기능
4. Structure VS Class
- Structure : Value Types, Copy - STACK(메모리공간), 상속이 불가능하다
- Class : Reference Types, Share - HEAP(메모리공간), 단일상속 가능
- Enum : Value Types, 상속이 불가능하다, 정수의 경우 (Auto-incrementation)가능, 원시값을 참조가능하고, 이름이 곧 값이다.
Enum 예시
enum Animal {
case tiger
case leopard
case dog
}
let dog2: Animal = .dog (Animal 생략가능. 이유는 앞에 타입을 이미 Animal이라 해둬서)
print(dog2) // dog ( 이름 그자체로 값을 전달함 )
-
관계가 있는 데이터를 표현 할 때에는 Structure구조가 좋다
-
- 인스턴스는 특정타입이 메모리에 적재된 시점의 타입
- Structure와 Class 선언 예시
Structure는 관계가 있는 것 들을 코드에서 나타내 주기 때문에 다른사람이 보았을때 이 코드가 어떤 녀석이고 어디에 쓰일지 쉽게 유추가 가능하다.
class PersonClass {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
struct PersonStruct {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
'IOS > Swift' 카테고리의 다른 글
[TIL] Swift. Method (0) | 2020.10.06 |
---|---|
[TIL] Swift. Property (0) | 2020.10.01 |
[TIL] Swift. Function Expression (0) | 2020.09.29 |
[TIL] Swift. Collection (0) | 2020.09.29 |
[TIL] Swift. Optional (0) | 2020.09.24 |