/*
captialize the first character of structure name
it means MyStruct is a data type just like String, Int
*/
struct MyStruct{}
MyStruct()
*creating a structure in my code is like creating blueprint of car. And blueprint has properties what the object can do.
(blueprint = structure, car = object)
이 청사진을 실제 오브젝트로 바꾸는게 initialising이다.
init() { }
=> initialiser는 청사진에서 오브젝트가 만들어질 때 작동한다. 근데 왜 우리는 initialiser를 사용하는가?
*struct의 내부에서 property 앞에 self가 붙었을 때, 이 self는 let(immutable)을 의미한다. 가령 struct의 내부에서 immutable한 property를 바꾸고 싶은 경우 'mutating'을 앞에 붙이면 된다.
=> 즉, struct 내부에는 두 가지 method가 있는데, 첫째는 behavior의 method이고, 두번째는 mutating method(to change properties in side of struct)이다.
-> sturcture와 같이 object를 만들기 위한 blueprint 역할을 한다.
class ClassName {}
ClassName()
class SubclasName: SuperclassName
override func functionName() {}
*functionName()은 superclass에서 선언된 method이다.
똑같은 이름의 메서드를 이용해 subclass의 method를 새로 선언 할 수 있다.
⭐️swift에서의 class 체계(내림차순)
NSObject -> UIResponder -> UIView -> UIControl -> UIButton
공통점: 둘 다 청사진 역할을 맡아 object를 원하는 만큼 만들어낼 수 있다.
차이점
-> inheritance를 보여주는 skeleton 예시
structureskeleton1,2가 각각 독립된 개체로 인식된다.
=> structure는 사진 복사본을 다른 사람에게 주는 것과 같다.
classskeleton1,2가 한 개체로 인식된다.
=> class는 다른 사람에게 내 컴퓨터에 있는 사진 파일에 접근 가능하게 해주는 것과 같다. 가령 많은 사람이 이 사진에 접근 가능하면 문제가 발생하기 쉽다.
그래서 애플에서는 struct 사용을 권장한다. 하지만 inheritance or objective-c로 작업 시 struct를 class로 바꿔야한다.
init(A: ADataType, B: BDataType) {
self.A : A
}