생김새나 느낌은 TS interface 혹은 class와 비슷하다 그런데 Swift에서는 구조체와 클래스 모두 값을 저장하고 조작하는데 사용하는 사용자 정의 데이터 타입 이라고 하니 사용처가 다른 듯 하다.
// 구조체 기본형
struct 구조체이름 {
// 구조체 변수 및 함수
}
// exam
struct Rectangle {
var width: Double
var height: Double
var area: Double
// 커스텀 이니셜라이져
init(width: Double, height: Double) {
self.width = width
self.height = height
self.area = width * height
}
}
//
구조체에는 2가지 속성이 존재
1. 저장속성 => 값을 실제로 메모리에 저장
2. 계산속성 => 계산을 통해 값 반환 or 설정
struct Rectangle {
// 저장속성
var width: Double
var height: Double
// 계산속성
var area: Double {
get{
// area 값 읽었을때 아래 return 값으로 읽힘
return width * height
}
set{
// 새로운 값 할당될 시 실행
// 외부에서 전달된 값을 사용할때 newValue 사용
return height = newValue / width
}
}
}
구조체 동작을 정의할 수 있고 타입 메서드와 인스턴스 메서드로 나뉜다.
// 인스턴스 메서드는 mutating 키워드 사용
// 타입 메서드는 static 키워드 사용
struct Counter {
var count:Int = 0
mutating func increment() {
count += 1
}
// 타입 메서드는 구조체를 생성하지 않고 호출 가능
static func shared() -> Counter {
return Counter()
}
}
Counter.shared() // => 정상동작
Counter.increment() // => 오류
var counter = Counter()
counter.increment() // => 정상동작