스위프트에서 대부분의 타입은 구조체로 이루어져있음. 구조체는 값 타입이며, 타입 이름은 대문자 camel case를 사용하여 정의. 프로퍼티는 구조체 안에 들어가는 인스턴스 변수, 메서드는 구조체 안에 들어가는 함수.
struct 이름 { /*구현부*/ }
struct Sample {
///인스턴스 프로퍼티///
//가변 프로퍼티
var mutableProperty: Int = 100
//불변 프로퍼티
let immutableProperty: Int = 100
//타입 프로퍼티
static var typeProperty: Int = 100
///인스턴스 메서드///
func instanceMethod() {
print("instance method")
}
///타입 메서드///
static func typeMethod() {
print("type method")
}
}
//가변 인스턴스 생성
var mutable: Sample = Sample()
mutable.mutableProperty = 200
//불변 프로퍼티는 인스턴스 생성 후 수정 불가
//mutable.immutableProperty = 200
//불변 인스턴스
let immutable: Sample = Sample()
//불변 인스턴스는 아무리 가변 프로퍼티라도 인스턴스 생성 후에 수정불가
//immutable.mutableProperty = 200
//immutable.immutableProperty = 200
//타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod() //type method
//인스턴스에서는 타입 프로퍼티나 타입 메서드 사용불가
//타입자체(Sample)에서 사용해야함
//mutable.typeProperty = 400
//mutable.typeMethod()
struct SmartPhone {
var iphone: String = "11"
let maker: String = "apple"
static var os: String = "ios"
func launchIphone() {
print("new iphone \(self.iphone)")
}
static func launchIpad() {
print("new ipad!")
}
}
var hoson: SmartPhone = SmartPhone()
hoson.iphone = "13"
hoson.launchIphone() //new iphone 13!
let nylonmask: SmartPhone = SmartPhone()
nylonmask.launchIphone() //new iphone 11!
//타입 메서드 사용(타입자체인 SmartPhone에서 사용)
SmartPhone.launchIpad()