⭐️ Swift Tip of the day : 스위프트 기초 문법 CLASS
/ STRUCT
/ ENUM
CLASS / STRUCT / ENUM
CLASS(클래스)
- swift에서는 객체라는 용어대신에
인스턴스
라는 용어를 사용합니다. 한마디로 클래스타입의 인스턴스를 객체라고 칭하지 않습니다. - 단일 상속만 가능합니다.
- (인스턴스/타입) 메서드, (인스턴스/타입) 프로퍼티 (
Struct
와 같음) - 참조타입(=reference type) (리퍼런스
reference
라고 부름) - iOS 프레임워크의 대부분이
클래스
로 구성되어있습니다. - SwiftUI에서는 대부분잉
Struct
로 구성되어있습니다.
STRUCT(구조체)
CLASS
와 다르게 상속이 불가능 합니다.- (인스턴스/타입)메서드, (인스턴스/타입)프로퍼티 (클래스와 같음)
- 값타입(=value type) (
value
라고 부름) - Swift의 대부분의 큰 뼈대는 모두
STRUCT
(구조체)로 구성이 되어있습니다. -
Int
,Double
,String
등 데이터 타입
- Struct
를 사용하는 경우
1. 연관된 몇몇의 값들을 모아서 하나의 데이터타입으로 표현하고 싶을 때,
2. 다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할 때,
3. 자신을 상속할 필요가 없거나 자신이 다른 타입을 상속받을 필요가 없을 때,
4. Apple 프레임워크에서 프로그래밍을 할 때에는 주로 클래스를 많이 사용한다.
Struct
에 대해 자세히 알고싶다면 여기를 클릭해주세요.
ENUM(열거형)
- 상속이 불가능하다
- (인스턴스/타입)메서드, (인스턴스/타입)연산 프로퍼티
enum Animal {
case tiger
case lion
case bear
}
let tiger2: Animal = Animal.tiger
let lion2: Animal = .lion
열거형으로 동물의 이름을 설정해줬고, tiger2
라는 변수는 Animal타입
을 가지고 Animal.tiger
값을 줬습니다.
하지만 lion2
에 Animal타입
을 가지고 .lion
값만 주었는데 위와 같은 의미를 가지고 있는 것입니다.
처음 변수를 선언할 때 tiger2
에 이 것은 Animal타입
이다. 라는 것을 인식시켜주었고, 컴파일러가 알아서 기억을 하게 되는것입니다.
열거형에서 원시값은 rawValue
입니다. Animal
에 타입을 지정해줘보록 하겠습니다.
enum Animal : Int {
case tiger = 0
case lion
case bear
}
tirger
에게 0이라는 원시값을 할당해주었습니다.
print(tiger2.rawValue) // 0
print(lion2.rawValue) // 1
print(bear2.rawValue) // 2
enum Animal : Double {
case tiger = 0
case lion
case bear
}
print(tiger2.rawValue) // 0.0
print(lion2.rawValue) // 0.1
print(bear2.rawValue) // 0.2
Enum을 사용하는 여러가지 방법
enum School {
case elementry
case middle
case high
//아래와 같이 한 줄 표현 가능
// case elementary, middle, high
}
let yourSchool = School.elementry
print("YourSchool : \(yourSchool)") //YourSchool : elementry
enum Grade : Int {
case first = 1
case second = 2
}
let yourGrade = Grade.second
print("YourGrade : \(yourGrade.rawValue)") //YourGrade : 2
enum SchoolDetail {
case elementary(name: String)
case middle(name: String)
func get() -> String {
switch self {
case .elementary(let name):
return name
case .middle(let name):
return name
}
}
}
let yourMiddleSchoolName = SchoolDetail.middle(name: "서근")
print("Your Middle School Name is \(yourMiddleSchoolName.get())")
//Your Middle School Name is 서근
Class 와 Struct의 차이점
- 클래스는 참조 타입, 열거형과 구조체는 값 타입이라는 것이 가장 큰 차이
- 클래스는 상속이 가능하지만, 열거형과 구조체는 상속이 불가능
Class 와 Struct의 공통점
- 서로 다른 타입(자료형)들을 하나로 묶을 수 있다.
- (인스턴스/타입) 메서드, (인스턴스/타입) 프로퍼티
- 이러한 묶은 자료형들을 새로운 타입처럼 사용 가능.
- 클래스/구조체 안에서 함수/프로퍼티 정의 가능
- extension
이 가능.
| Class | Struct | Enum |
Type | Reference | Value | Value |
Subclassing | ○ | X | X |
Extension | ○ | ○ | ○ |
읽어주셔서 감사합니다🤟
'SWIFT > Grammar' 카테고리의 다른 글
Swift : 기초문법 [문자열 보간(String interpolation)] (0) | 2021.02.18 |
---|---|
Swift : 기초문법 [Double / Float / Booleans] (0) | 2021.02.17 |
Swift : 기초문법 [멀티라인(multi-line) strings] (0) | 2021.02.17 |
Swift : 기초문법 [ 고급편 - 함수 ] (0) | 2021.01.28 |
Swift : 기초문법 [ Optional 옵셔널 - Unwrapping ] (0) | 2021.01.27 |