Swift
- 객체 지향 프로그래밍 언어로 클래스(class), 구조체(struct), 열거형(enum)과 같은 다양한 데이터 타입을 제공하여 코드를 구조화하고 모듈화하는 데 도움을 줌
1. 클래스 (Class)
- 클래스 내에 변수나 상수(Properties)와 메서드(Methods)를 정의하여 클래스를 구현
- Swift에서는 객체라는 용어 대신 인스턴스라는 용어를 사용
- 클래스의 인스턴스를 생성할 때, 초기화 메서드(Initializer, 생성자)를 사용하여 속성의 초기값 설정
- 단일 상속만 가능
- iOS 프레임워크에서 프로그래밍할 때 주로 클래스를 많이 사용
- 참조 타입(= reference type)으로 분류 됨
→ 클래스 인스턴스를 변수나 상수에 할당할 때, 데이터의 복사가 아닌 인스턴스에 대한 참조가 이루어짐.
여러 변수나 상수가 하나의 클래스 인스턴스를 공유할 수 있음
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
- 'ViewController' 클래스는 'UIViewController'를 상속
2. 구조체 (Struct)
- 구조체는 클래스와 유사하지만, 값 타입(value type)으로 동작
- 값 타입은 할당 시에 복사되므로 하나의 인스턴스 변경이 다른 인스턴스에 영향을 주지 않음
- 구조체는 간단한 데이터를 캡슐화하거나 메서드와 함꼐 사용하여 기능을 구현하는 데 유용
- 상속 불가능
- SwiftUI에서는 대부분이 Struct로 구성됨
Struct를 사용하는 경우
- 연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶을 때
- 다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할 때
- 자신을 상속할 필요가 없거나 자신이 다른 타입을 상속받을 필요가 없을 때
struct User {
let name: String
let age: Int
}
3. 열거형 (Enum)
- 명명된 상수 그룹을 정의할 수 있는 타입
- 유한한 선택지를 나타내는 데 사용됨. ex) 컬러나 요일 등
- 각 케이스는 해당 열거형의 고유한 값
- 연관 값을 가질 수 있어서 각 케이스에 연관된 데이터를 저장할 수 있음
- 상속이 불가능 함
열거형을 정의하고 변수에 할당
import UIKit
// 열거형 타입
enum Animal {
case cat
case dog
case cow
}
let cat1 : Animal = Animal.cat // cat
let dog1 : Animal = Animal.dog // dog
let cow1 : Animal = Animal.cow // cow
열거형에서 원시값 (rawValue) 설정
Int
import UIKit
// 열거형 타입
enum Animal : Int {
case cat = 0
case dog
case cow
}
let cat1 : Animal = Animal.cat // cat
let dog1 : Animal = Animal.dog // dog
let cow1 : Animal = Animal.cow // cow
print(cat1.rawValue) // 0
print(dog1.rawValue) // 1
print(cow1.rawValue) // 2
Double
import UIKit
// 열거형 타입
enum Animal : Double {
case cat = 0
case dog
case cow
}
let cat1 : Animal = Animal.cat // cat
let dog1 : Animal = Animal.dog // dog
let cow1 : Animal = Animal.cow // cow
print(cat1.rawValue) // 0.0
print(dog1.rawValue) // 1.0
print(cow1.rawValue) // 2.0
Class와 Struct의 차이점
- 클래스는 참조 타입, 열거형과 구조체는 값 타입! → 참고) 2023.08.22 - [분류 전체보기] - Swift - mutating
- 클래스는 상속 가능하지만, 열거형과 구조체는 상속 불가능
- 클래스 인스턴스는 타입 캐스팅을 통해 다른 클래스 타입으로 형 변환 가능. 구조체, 열거형은 불가능
-
Class와 Struct의 공통점
- 서로 다른 타입(자료형)들을 하나로 묶을 수 있음
- 메서드, 프로퍼티 사용
- 묶은 자료형들을 새로운 타입처럼 사용 가능
- 클래스 / 구조체 안에서 함수 / 프로퍼티 정의 가능
- 프로토콜 채택 : 클래스, 구조체, 열거형 모두 프로토콜을 채택하여 특정한 규약을 준수할 수 있음
- 확장(extension) : 클래스, 구조체, 열거형 모두 확장하여 새로운 프로퍼티와 메서드를 추가할 수 있음
참고)
https://seons-dev.tistory.com/entry/Swift-%EA%B8%B0%EC%B4%88%EB%AC%B8%EB%B2%951-CLASS-STRUCT-ENUM
https://zeddios.tistory.com/12
'Swift' 카테고리의 다른 글
Swift - HIG (Human Interface Guide) (0) | 2023.08.28 |
---|---|
Swift - Extension (확장) (0) | 2023.08.24 |
Swift - mutating (0) | 2023.08.22 |
Swift - DispatchQueue (0) | 2023.08.22 |
Swift - UserDefaults (0) | 2023.08.16 |