값 타입 vs 참조 타입 설명은 다음을 참고 -> Value Type / Reference Type
Enumerations 열거형
An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code.
연관된 값들을 하나의 그룹으로 묶어 데이터 타입으로 정의한 자료형
열거형을 사용하면 미리 정의해둔 타입의 케이스 내에서 벗어날 수 없으므로 코드의 가독성과 안정성이 높아짐
→ 명확한 분기 처리 가능 (열거형은 항상 switch문으로 분기처리 가능)
다른 언어와 다르게 Swift에서 열거형은 값을 따로 선언해주지 않아도 된다.
- 값 타입
ex) enum 사용 예시
enum Family {
case father
case mother
case brother
//case father, mother, brother
}
print(Family.mother) //mother
enum Order: Int {
case father = 1
case mother
case brother
}
print(Order.mother.rawValue) //2
enum FamilyName {
case father(name: String)
case mother(name: String)
func get() -> String {
switch self {
case .father(let name):
return name
case let .mother(name):
return name
}
}
}
let motherName = FamilyName.mother(name: "김태희")
print(motherName) //mother(name: "김태희")
print(motherName.getName()) //김태희
클래스와 구조체는 정의 방식은 비슷하지만(similar definition syntax), 엑세스 할 때 (가져다 쓸 때) 차이가 난다.
Class
- 단일 상속만 가능
- 참조 타입 (= reference type)
Struct 구조체
- 상속이 불가능
- 값 타입 (= value type) 변수나 상수에 할당되거나 함수에 전달될 때 값이 복사되는 유형
struct는 값을 복사하기 때문에 원본/복사본 값이 서로 영향을 받지 않아 안전하다. 보통 서버에서 json 정보 등을 가져왔을 때 사용.
따라서 간단한 json 정보를 파싱하거나 기능들을 모아놓은 구조체를 만들 때 사용.
Class 클래스 | Struct 구조체 | Enum 열거형 |
참조 타입 call by reference | 값 타입 call by value | 값 타입 call by value |
상속가능 | 상속 불가능 | 상속 불가능 |
참조되는 값은 힙 메모리 영역에 저장됨 | 스택 메모리 영역에 할당 → 속도가 빠름 | |
레퍼런스 형태로 공유가 가능 | 공유 불가능 | |
iOS 프레임워크의 대부분이 클래스로 구성 | Swift의 대부분 큰 뼈대는 모두 구조체로 구성 ex) 데이터 자료형 타입 (Int, String, Double, Float, Array 등) |
|
항상 새로운 변수로 값의 복사가 일어나기 때문에 멀티스레드 환경에서 문제가 일어날 확률이 적음 |
+ 타입 프로퍼티? 인스턴스 프로퍼티?
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift] inout parameter (0) | 2022.05.22 |
---|---|
[Swift] 메서드 정복하기 Instance / static / class methods 비교 (0) | 2022.05.13 |
About Swift (0) | 2022.05.12 |
[Swift] Access Control 접근 제어자 종류 및 사용 (0) | 2022.05.11 |
[Swift iOS] UITextView set placeholder (0) | 2021.12.09 |