IOS/Swift

[TIL] Swift. Class 2편

1. 언제 클래스와 구조체를 사용하는지.

  1. Struct 를 사용해야 할때
    • 두 Object를 "같다, 다르다" 로 비교해야 하는 경우

let point1 = Point(x:3, y:5)
let point2 = Point(x:3, y:5)

//데이터 자체를 비교하는 경우 Struct를 쓰는게 좋다
  • Copy된 각 책체들이 독립적인 상태를 가져야 하는경우
var myMac = Mac(owner: "Jason")
var yourMac = myMac
yourMac.owner = "Jay"

myMac.owner // "Jason"
yourMac.owner // "Jay"
  • 코드에서 오브젝트의 데이터를 여러 스레드 걸쳐 사용할 경우

2.Class를 사용해야 할때

  • 두 Object의 인스턴스 자체가 같음을 확인해야 할때
  • 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우

3.  정리하자면

  1. 먼저 구조체로 작성하자.
  2. 만약 클래스가 필요하다면 구조체에서 간단하게 바꾸면 된다.
  3. 그리고 Swift는 구조체를 좋아한다.
  4. 스택오버플로우 보다는 공식문서를 먼저 확인을 하자.

2. 상속 (Inheritance)

  • 클래스 끼리의 연관관계에서 만약 사람이라는 클래스와 학생이라는 클래스가 있다면 ,학생은 사람이다라는 명제가 성립하기 때문에 상속을 해주는 게 좋다
  • 표현
    • class 상속받을 클래스명 : 상속할 클래스명
    • 상속받을 클래스명 = SubClass(Child Class)
    • 상속할 클래스명 = Super Class(Parent Class)
  • 상속받은 클래스는 부모의 것을 모두 접근 할 수 있다.
  • 하지만 부모클래스는 상속된 클래스 안에 접근 할 수 없다
  • 간단하게 A 는 B이다가 말이되면 상속 가능하다

4. 상속의 규칙

  1. 자식은 한개의 superclass만 상속 받음
  2. 부모는 여러 자식들을 가질수 있다
  3. 상속의 깊이는 상관이 없음

5. 상속은 언제 하면 좋을까? ( 개발 철학이 중요하다)

  1. 상속의 경우에는 반복되는 코드를 줄일수 있는 장점이 있지만 단점으로는 깊이가 깊어질수록 유지보수가 힘들다.

  2. Single Responsibility(단일 책임)

    • 각 클래스는 한개의 고려사항만 있으면 된다. 하나의 클래스가 너무 많은 기능을 가지면 안좋다
  3. Type Safety( 타입이 분명해야 할때)

    • 큰 범위 안에서 하나의 종류를 솎아내서 관리하고 싶을때
  4. Shared Base Classes(다자녀가 있다!)

    • 내용 자체가 다르게 구현되어야 할때
    • 학생은 학습한다라는 공통적인 기능. 체육과 학생은 체육, 미술생은 미술, 의대생은 의학 이렇게 공통되지만 하나씩 다를 때.
  5. Extensibility (확장성이 필요한 경우)

    • 하나의 클래스로 여러 객체를 공통적으로 만들수 있는 경우
  6. Identity(정체를 파악하기 위해)

    • 어떤 객체를 판단하는 경우 상속을 통해 검증 할수있다 → 공통된 객체 안에서 특정 속성을 보고 파악할수 있다. (학생인데 체육대생, 미술대생 등등)

     

%% 많은 부분을 야곰님의 블로그를 참고했습니다. %%

'IOS > Swift' 카테고리의 다른 글

[TIL] Swift. ARC ( Automatic Reference Counting )  (0) 2020.10.09
[TIL] Swift. dequeueReusableCell  (0) 2020.10.09
[TIL] Swift. Class 1편  (0) 2020.10.07
[TIL] Swift. Method  (0) 2020.10.06
[TIL] Swift. Property  (0) 2020.10.01