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. 정리하자면
- 먼저 구조체로 작성하자.
- 만약 클래스가 필요하다면 구조체에서 간단하게 바꾸면 된다.
- 그리고 Swift는 구조체를 좋아한다.
- 스택오버플로우 보다는 공식문서를 먼저 확인을 하자.
2. 상속 (Inheritance)
- 클래스 끼리의 연관관계에서 만약 사람이라는 클래스와 학생이라는 클래스가 있다면 ,학생은 사람이다라는 명제가 성립하기 때문에 상속을 해주는 게 좋다
- 표현
- class 상속받을 클래스명 : 상속할 클래스명
- 상속받을 클래스명 = SubClass(Child Class)
- 상속할 클래스명 = Super Class(Parent Class)
- 상속받은 클래스는 부모의 것을 모두 접근 할 수 있다.
- 하지만 부모클래스는 상속된 클래스 안에 접근 할 수 없다
- 간단하게 A 는 B이다가 말이되면 상속 가능하다
4. 상속의 규칙
- 자식은 한개의 superclass만 상속 받음
- 부모는 여러 자식들을 가질수 있다
- 상속의 깊이는 상관이 없음
5. 상속은 언제 하면 좋을까? ( 개발 철학이 중요하다)
-
상속의 경우에는 반복되는 코드를 줄일수 있는 장점이 있지만 단점으로는 깊이가 깊어질수록 유지보수가 힘들다.
-
Single Responsibility(단일 책임)
- 각 클래스는 한개의 고려사항만 있으면 된다. 하나의 클래스가 너무 많은 기능을 가지면 안좋다
-
Type Safety( 타입이 분명해야 할때)
- 큰 범위 안에서 하나의 종류를 솎아내서 관리하고 싶을때
-
Shared Base Classes(다자녀가 있다!)
- 내용 자체가 다르게 구현되어야 할때
- 학생은 학습한다라는 공통적인 기능. 체육과 학생은 체육, 미술생은 미술, 의대생은 의학 이렇게 공통되지만 하나씩 다를 때.
-
Extensibility (확장성이 필요한 경우)
- 하나의 클래스로 여러 객체를 공통적으로 만들수 있는 경우
-
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 |