코드 출처 - iOS 프로그래밍을 위한 Swift 기초 강의
- 구조체, 클래스, 열거형은 모두 type을 정의하는 것이기 때문에 Upper Camel Case로 명명한다.
- 구조체 struct (→ 값 타입)
- Swift에서 대부분의 타입은 구조체로 정의된다.
- 정의
-
struct 이름 { /* 구현부 */ }
-
- 프로퍼티 property
- 인스턴스 프로퍼티 - 타입 안에 들어있는 변수
- 타입 프로퍼티 - 타입 자체가 사용하는 변수
- struct 내에서 사용함
- 앞에 static을 붙여 정의한다.
- 정의할 때 var를 붙이면 가변, let을 붙이면 불변이 된다.
- 메서드 method
- 구조체 내에 들어 있는 함수
- 인스턴스 메서드, 타입 메서드가 있다.
- 코드
- 클래스 class (→ 참조 타입)
- 다중 상속을 할 수 없음
- 정의
-
class 이름 { /* 구현부 */ }
-
- 구조체와 비슷하지만, 불변 인스턴스로 선언하더라도 내부의 가변 프로퍼티를 변경할 수 있다는 차이점이 있다.
- 두 가지 type method가 존재함
- 재정의 불가 → static func
- 재정의 가능 → class func
- 코드
- 열거형 enum (→ 값 타입)
- 유사한 종류의 여러 값을 한 곳에 모아서 정리한 것
- ex) 요일, 월, 계절, ...
- 정의
-
enum 이름 { case 이름1, case 이름2, case 이름3, 이름4, 이름5 //... }
- 한 줄에 개별로 하나씩, 또는 여러 개로 정의할 수 있음
-
- C언어의 열거형: 각 case별로 정수값을 할당함
- ↔ Swift의 열거형: 각각의 case가 고유한 값으로 취급됨
- 각 case별로 정수값을 할당하려면 원시값 rawValue를 사용하면 된다.
- 값은 모두 달라야 함
- 열거형의 이름 뒤에 : 원시값의 type를 표시
- 각 case별로 정수값을 할당하려면 원시값 rawValue를 사용하면 된다.
- ↔ Swift의 열거형: 각각의 case가 고유한 값으로 취급됨
- case는 한정되어 있기 때문에 다 적어주고 나면 default를 생략해도 된다.
- 원시값으로 case를 초기화할 수 있다.
- but 원시값이 case에 해당하지 않을 수 있으므로 원시값을 통해 초기화한 인스턴스는 옵셔널 타입이어야 한다.
-
let apple: Fruit? = Fruit(rawValue: 0)
-
- but 원시값이 case에 해당하지 않을 수 있으므로 원시값을 통해 초기화한 인스턴스는 옵셔널 타입이어야 한다.
- 열거형에 메서드를 추가할 수 있다.
-
enum Month { case dec, jan, feb case mar, apr, may case jun, jul, aug case sep, oct, nov func printMessage() { switch self { case .mar, .apr, .may: print("따스한 봄~") case .jun, .jul, .aug: print("더운 여름~") case .sep, .oct, .nov: print("선선한 가을~") case .dec, .jan, .feb: print("추운 겨울~") } } } Month.apr.printMessage() // 따스한 봄~
-
- 그 외 코드
- 유사한 종류의 여러 값을 한 곳에 모아서 정리한 것
- 클래스 vs 구조체/열거형
- 클래스 class
- 기존의 OOP 관점에서의 class와 크게 다를 바 없음
- but 상속이 된다는 점에서 다르다.
- 참조 타입이다.
- 값의 메모리 위치를 전달한다.
- Apple frame work의 대부분의 큰 뼈대 → class로 구성
- 기존의 OOP 관점에서의 class와 크게 다를 바 없음
- 구조체 struct
- 다른 언어의 구조체보다 다양한 기능을 가진다.
- 상속이 되지 않으며, 값 타입이다.
- 값을 복사해 전달한다.
- 사용
- 연관된 값들을 모아서 하나의 data type으로 표현하고자 할 때
- 참조가 아닌 복사를 원할 때
- 자신을 상속하거나 다른 타입을 상속받을 필요가 없을 때
- Swift의 대부분의 큰 뼈대 → struct로 구성
- 열거형 enum
- 다른 언어의 enum과 많이 다르다.
- Swift에서는 열거형 자체가 하나의 데이터 타입으로 취급된다.
- 각각의 case들을 전부 하나의 유의미한 값으로 취급한다.
- 다른 언어 → 정수 값으로만 취급
- 다른 언어의 enum과 많이 다르다.
- 정리
-
class struct enum Type (타입) Reference Value Value Subclassing (상속) O X X Extension (확장) O O O - 코드
-
- 클래스 class
'개발 > iOS' 카테고리의 다른 글
swift 문법 기초 5/7 (0) | 2021.08.28 |
---|---|
[Swift] 함수형 타입 Functional Type (0) | 2021.08.28 |
틀린 문제 (스위프트 함수 퀴즈) (0) | 2021.08.26 |
swift 문법 기초 3/7 (nil, Optional) (0) | 2021.08.25 |
swift 문법 기초 2/7 (0) | 2021.08.25 |
댓글