Structure & Class

권현석·2022년 12월 13일
0

문법

목록 보기
1/1

Structure?

  • structure: creat custom data types
  • how to define
/*
captialize the first character of structure name
it means MyStruct is a data type just like String, Int
*/
struct MyStruct{}
  • how to initialising
    *initialising means creating an actual object we can use
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이다.

  • Creating the initialiser
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)이다.

Class?

-> sturcture와 같이 object를 만들기 위한 blueprint 역할을 한다.

  • class 선언
class ClassName  {} 
  • initialise class
ClassName() 

superclass & subclass

  • superclass는 부모, subclass는 superclass의 자식이라 생각하자.
  • superclass는 subclass에게 자신이 알고 있는것(properties & methods)를 알려준다.
  • subclass는 이를 배워서 자신만의 지식(properties & methods)을 만들어낸다.
    => suclass는 superclass의 모든 propety와 method에 접근이 가능하다. 이 과정을 inheriance라 할 수 있다.
class SubclasName: SuperclassName

override(재정의)

override func functionName() {}

*functionName()은 superclass에서 선언된 method이다.
똑같은 이름의 메서드를 이용해 subclass의 method를 새로 선언 할 수 있다.

⭐️swift에서의 class 체계(내림차순)
NSObject -> UIResponder -> UIView -> UIControl -> UIButton

structure VS class

  • 공통점: 둘 다 청사진 역할을 맡아 object를 원하는 만큼 만들어낼 수 있다.

  • 차이점

  1. class는 inherit가능, structure는 불가능
    => inherit 때문에 class는 sturct보다 오류 발생이 쉽고 복잡함
    struc는 immutable 이다.

-> inheritance를 보여주는 skeleton 예시

structureskeleton1,2가 각각 독립된 개체로 인식된다.
=> structure는 사진 복사본을 다른 사람에게 주는 것과 같다.

classskeleton1,2가 한 개체로 인식된다.
=> class는 다른 사람에게 내 컴퓨터에 있는 사진 파일에 접근 가능하게 해주는 것과 같다. 가령 많은 사람이 이 사진에 접근 가능하면 문제가 발생하기 쉽다.

그래서 애플에서는 struct 사용을 권장한다. 하지만 inheritance or objective-c로 작업 시 struct를 class로 바꿔야한다.

  1. class는 init이 필수, structure는 필수X
    ⭐️ 아래에 self.A에 있는 'A'는 class 선언 시 변수 or 상수
init(A: ADataType, B: BDataType) {
	self.A : A
}
profile
wanna be an iOS developer

0개의 댓글