1. 구조체란?
- 스위프트 대부분 타입은 구조체로 이루어져 있다
- 구조체는 값(value) 타입이다
- 타입이름은 대문자 카멜케이스를 사용해 정의한다
2. 구조체 문법
- 구조체 정의는 "struct" 키워드를 사용한다
구조체 기본 형태
struct 이름 {
// 구현부
}
구조체 프로퍼티 및 메서드 구현
struct Sample {
// 가변 프로퍼티 (값 변경 가능)
var mutableProperty: Int = 100
// 불변 프로퍼티 (값 변경 가능)
let immutableProperty: Int = 100
// 타입 프로퍼티 (static 키워드 사용 : 타입 자체가 사용하는 프로퍼티)
static var typeProperty: Int = 100
// 인스턴스 메서드(인스턴스가 사용하는 메서드)
func instanceMethod() {
print("instance method")
}
// 타입 메소드(static 키워드 사용 : 타입 자체가 사용하는 메소드)
static func typeMethod() {
print("type method")
}
}
구조체 사용
// 가변 인스턴스 생성
var mutable: Sample = Sample() // Sample 구조체의 mutable 인스턴스 생성
mutable.mutableProperty = 200
mutable.immutableProperty = 200 // 컴파일 오류 발생
👉 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없다
// 불변 인스턴스
let immutable: Sample = Sample()
immutable.mutalbeProperty = 200 // 컴파일 오류 발생
immutable.immutableProperty = 200 // 컴파일 오류 발생
👉 불변 인스턴스는 아무리 가변 프로퍼티라도 인스턴스 생성 후에 수정할 수 없다
// 타입 프로퍼티 및 메소드
Sample.typeProperty = 300
Sample.typeMethod() // type method
mutable.typeProperty = 400 // 컴파일 오류 발생
mutable.typeMethod() // 컴파일 오류 발생
👉 인스턴스에서는 타입 프로퍼티나 타입 메소드를 사용할 수 없다
3. 학생 구조체 만들어보기
struct Student {
// 가변 프로퍼티
var name: String = "unknown"
// 키워드도 `로 묶어주면 이름으로 사용할 수 있다
var `class`: String = "swift"
// 타입 메소드
static func selfIntroduce() {
print("학생타입입니다")
}
// 인스턴스 메소드
func selfIntroduce() {
print("저는 \(self.class)반 \(name)입니다")
// self는 인스턴스 자신을 지칭하며, 몇몇 경우를 제외하고 사용은 선택사항이다
}
}
타입 메소드 사용
Student.selfIntroduce()
학생 타입입니다
가변 인스턴스 생성 및 활용
var jjudy: Student = Student()
jjudy.name = "jjudy"
jjudy.class = "스위프트"
jjudy.selfIntroduce()
저는 스위프트반 jjudy입니다
불변 인스턴스 생성 및 활용
let jina: Student = Student()
jina.name = "jina" // 컴파일 오류 발생
// 불변 인스턴스이므로 프로퍼티 값 변경이 불가능하다
jina.selfIntroduce()
저는 Swift반 unknown입니다
정리
1. 구조체란 인스턴스의 값(프로퍼티)을 저장하거나 기능(메소드)을 제공하고 이를 캡슐화할 수 있는 스위프트가 제공하는 타입(named type)으로, 값(value) 타입이며 대문자 카멜케이스를 사용해 정의한다
2. 구조체 문법
struct 이름 {
// 구현부
}
- 가변 프로퍼티 : var, 값 변경 가능
- 불변 프로퍼티 : let, 값 변경 불가능
- 타입 프로퍼티 : static 키워드를 사용하며, 타입 자체가 사용하는 프로퍼티다
- 인스턴스 메서드 : 인스턴스가 사용하는 메소드
- 타입 메소드 : static 키워드를 사용하며, 타입 자체가 사용하는 메소드다
3. 구조체 사용
- 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없다
- 불변 인스턴스는 아무리 가변 프로퍼티라도 인스턴스 생성 후에 수정할 수 없다
- 인스턴스에서는 타입 프로피나 타입 메소드를 사용할 수 없다
- 키워드로 `로 묶어주면 이름으로 사용할 수 있다
- self는 인스턴스 자신을 지칭하며, 며쳠ㅊ 경우를 제외하고 사용은 선택사항이다'
2022.02.23 - [Study/Swift_BoostCourse_Basic] - iOS 프로그래밍을 위한 스위프트 기초
iOS 프로그래밍을 위한 스위프트 기초
다음과 같이 연재되는 포스트는 부스트코스에서 야곰님의 'iOS 프로그래밍을 위한 스위프트 기초' 강좌를 수강한 후 작성한 기록입니다. 부스트코스에서 야곰님의 'iOS 프로그래밍을 위한 스위프
jjudy99.tistory.com
'[Non-Updated] iOS > Swift_BoostCourse_Basic' 카테고리의 다른 글
[Swift_BoostCourse_Basic] CH 2_15. 열거형 (0) | 2022.03.08 |
---|---|
[Swift_BoostCourse_Basic] CH 2_14. 클래스 (0) | 2022.03.08 |
[Swift_BoostCourse_Basic] CH 1_Quiz 1 (0) | 2022.03.08 |
[Swift_BoostCourse_Basic] CH 1_12. 옵셔널 추출 (0) | 2022.03.08 |
[Swift_BoostCourse_Basic] CH 1_11. 옵셔널 (0) | 2022.03.03 |