2단원
13. 구조체
정의
Swift의 구조체는 타입을 정의하는 것이기 때문에 대문자 카멜케이스를 사용하여 정의한다.
struct Sample {
var mutableProperty: Int = 100 // 가변 프로퍼티
let immutableProperty: Int = 1000 // 불편 프로퍼티
static var typeProperty: Int = 100 // 타입 프로퍼티
// 인스턴스 메서드
func instanceMethod() {
print("instance method")
}
// 타입 메서드
static fuc typeMethod() {
print("type method")
}
}
var → 가변, let → 불변
static을 붙이면 struct Sample에서 사용할 수 있는 타입 프로퍼티가 된다.
가변 인스턴스
var mutable: Sample = Sample()
앞에 var를 붙였기 때문에 내부 프로퍼티를 변경할 수 있다.
mutable.mutableProperty = 200
다만, 프로퍼티 선언 시 불변으로 정의한 것은 변경할 수 없다.
mutable.immutableProperty = 100 // 오류발생
불변 인스턴스
let immutable: Sample = Sample()
주의할 점은, let으로 선언한 인스턴스에서는 아무리 프로퍼티가 var로 선언되었어도 변경할 수 없다.
immutable.mutableProperty = 200 // 오류발생
immutable.imutableProperty = 200 // 오류발생
타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod() // Type method
위의 방식과는 다르게 타입의 하나로서 바로바로 사용할 수 있다.
다만, 주의해야할 점은 인스턴스에서 타입 프로퍼티를 접근하는 것은 허용되지 않는다.
mutable.typeProperty = 400 // 오류발생
mutable.typeMethod() // 오류발생
예시
Student 구조체를 만든다.
struct Student {
var name: String = "unknown"
var `class`: String = "Swift" // class는 원래 정의되어 있기 때문에 강세표를 넣어서 사용할 수 있도록 한다.
static func selfIntroduce() {
print("학생타입입니다")
}
func selfIntroduce() {
print("저는 \(self.class)반 \(name)입니다")
}
}
타입 메소드
Student.selfIntroduce() // 학생타입입니다
인스턴스를 만든다음 selfIntroduce()를 실행하면
var fuyukawa: Student = Student()
fuyukawa.name = "fuyukawa"
fuyukawa.class = "스위프트"
fuyukawa.selfIntroduce() // 저는 스위프트반 fuyukawa입니다.
func selfIntroduce가 실행된다.
불변으로 정의하면
let jina: Student = Student()
이고 수정하려고 하면
jina.name = "jina"
오류가 발생한다.
그렇지만, 메소드는 실행할 수 있다.
jina.selfIntroduce() // 저는 Swift반 unknown입니다
©️NAVER Boostcourse. All Rights Reserved.
'앱 개발 > IOS' 카테고리의 다른 글
[IOS 프로그래밍을 위한 스위프트 기초] 2단원 15. 열거형 (0) | 2024.03.06 |
---|---|
[IOS 프로그래밍을 위한 스위프트 기초] 2단원 14. 클래스 (0) | 2024.03.06 |
[IOS 프로그래밍을 위한 스위프트 기초] Quiz 1-5 스위프트 옵셔널 퀴즈 (0) | 2024.03.01 |
[IOS 프로그래밍을 위한 스위프트 기초] Quiz 1-4 스위프트 제어구문 퀴즈 (0) | 2024.03.01 |
[IOS 프로그래밍을 위한 스위프트 기초] Quiz 1-3 스위프트 함수 퀴즈 (0) | 2024.03.01 |