Structure : 관계있는 데이터들을 묶어서 표현하는 방법
+) object = data + method
여기서 object를 표현하는 방법으로는 structure과 class가 있다.
Structure: value type(copy)+ stack
Class: reference type(share)+ heap
변수를 생성한 후 할당할 때 structure는 복사하기 때문에 변경x, class는 변수의 값이 바뀌면 원본도 함께 변경됨. class는 복사본과 원본이 같은 객체를 가리키고 있다고 보면 됨.
: 규약, 지켜야 할 약속
: 꼭 구현되어야할 method나 property, 변수를 생성할 때 직접 사용이 가능하며 기본 제공해주는 서비스 느낌
var fullName: String{
get{
return "\(fullName)\(LastName)"
}
set {
}
-> set 사용해서 computed property에서도 setting 가능
static elt isAlien: Bool = false
Person.isAlien -> 여기서 Person은 instance가 아니라 property 그 자체임
lazy var isPopular: Bool = {
if fullName == "Jay Park" {
return true
} () {else
return false
}
-> 왜 사용하는지가 중요함
1. 최적화하기 위해서 사용
2. 모든 사용자에게 접근하는 것이 아니기 때문에 효율화 차원에서 사용
: 결과가 똑같은 경우, 뭘 사용하는게 좋은지?
property는 값을 반환하고 method는 작업을 한다.
if method가 그냥 값 리턴하는 작업만 한다면?
1. Setter가 필요한 경우 -> computed property 사용
2. Setter가 필요없고 계산이나 DB access, File iO가 필요한 경우에는 method 사용
3. Setter가 필요없고 계산이나 DB access, File iO가 필요없는 경우에는 computed property 사용
method는 instance안에 귀속돼서 사용할 수 있음, struct/class 안에서 동작
static func 소속학원이름() -> String{
return "패스트캠퍼스"
}
Lecture.소속학원이름()
Struct Math{
static func abs(value: Int) -> Int{
if value > 0 {
return value
} else {
return - value
}
}
}
: Math 확장하겠다 -> extension 사용
extension Math{
static func square(value: Int) -> Int{
return value * value
}
static func half(value: Int) -> Int{
return value / 2
}
}