No.18
클래스의 상속
- 상속의 기본 개념
- [수직 확장] : 본질적으로 성격이 비슷한 타입을 새로 만들어 데이터(저장속성)를 추가하거나 기능(메서드)를 변형시켜서 사용하려는 것
- 스위프트는 다중상속 지원 안함
- 클래스에서만 지원하는 기능(구조체는 상속 불가능)
- 클래스의 상속 금지의 키워드 final
- final를 각 멤버 앞에 붙인 경우, 해당 멤버 재정의 불가라는 뜻
- 상위 클래스에서 존재하는 멤버를 변형하는 것을 재정의라고 함
- 재정의를 하려는 멤버에는 override 키워드를 붙임
- 저장 속성은 재정의 불가
- childClass에서는 parentClass의 데이터(저장속성)를 추가만, 기능(메서드)를 추가 및 변형(대체)만 가능하다.
- 즉, childClass는 parentClass의 메모리 구조를 깰 수 없기 때문.
- 자식 클래스의 메서드는 상위 클래스의 메서드 주소만 가져옴.
- 오버라이딩 시 변경됨
- 클래스의 저장 속성, 계산 속성이 Data영역에서 따로 존재하는 것을 기억하기
- UIKit에서의 예시

클래스 상속과 재정의
- 재정의 규칙
- 대원칙
- 저장 속성 재정의 불가
- 메서드는 재정의 가능(다만, 기능 확장만 가능)
- 저장 속성
- [원칙] : 재정의 불가
- 메모리 구조에서 상위 구현을 참조하기 때문에 재정의(변형) 불가능
- [예외] : 메서드 형태로 부수적 추가는 가능
- 메모리 구조를 건드리지 않는 형태로는 가능
- 읽기 / 쓰기 계산속성 형태로 재정의 가능(메서드 추가 형태로 구현)
- 속성감시자 형태로 재정의 가능 (실질적 단순 메서드 추가)
- [원칙] : 재정의 불가
- 계산 속성 (실질적 메서드)
- 계산속성의 재정의는 실질적 메서드 대체
- 확장 방식의 재정의 가능
- 읽기 → 읽기 / 쓰기 가능 (기능 확장 가능)
- 읽기/쓰기 → 읽기는 불가능 (기능 축소 불가능)
- 속성 감시자를 추가하는 재정의는 가능 (실질적 단순 메서드 추가)
- 속성감시자 부분 참고
- 생성자
- 기본적으로 상속되지 않고 재정의 원칙
- 다만 예외적으로 자동상속이 되는 부분이 있는데, 추후에 다룸
- 메서드
- 일반적으로 상위구현의 메서드를 대체 및 변형 할 수도 있으므로, 자유롭게 재정의 가능 (상위구현을 호출하는 경우도 많으니 주의)
- 대원칙
- 메모리 구조를 통한 이해
- 재정의 - 현재의 클래스에 맞게 상위 멤버를 변형시켜서, 사용 하려는 것
- 대원칙
- 저장 속성 재정의 불가
- 메서드는 자유롭게 재정의 가능(다만, 기능 확장만 가능 - 기능 축소 불가의 의미)
- 재정의를 하지 않아도, 상속에서는 당연히 모든 멤버의 상속이 일어남
- 저장 속성은 실제 인스턴스에 각각의 멤버별(속성별로) 저장공간이 있고, 변형하는 것이 불가 (상속의 기본 원칙)
- 메서드는 타입(데이터 영역)에만 배열형태로 주소값을 저장하며 존재하므로 각 상속단계에서 재정의 되고 대체 되는 것이 당연
반응형
'iOS > Swift' 카테고리의 다른 글
Swift No.18 (1) | 2024.01.23 |
---|---|
Swift No.17 (1) | 2024.01.23 |
Swift No.15 (0) | 2024.01.17 |
Swift No.14 (0) | 2024.01.16 |
Swift No.13 (0) | 2024.01.14 |
No.18
클래스의 상속
- 상속의 기본 개념
- [수직 확장] : 본질적으로 성격이 비슷한 타입을 새로 만들어 데이터(저장속성)를 추가하거나 기능(메서드)를 변형시켜서 사용하려는 것
- 스위프트는 다중상속 지원 안함
- 클래스에서만 지원하는 기능(구조체는 상속 불가능)
- 클래스의 상속 금지의 키워드 final
- final를 각 멤버 앞에 붙인 경우, 해당 멤버 재정의 불가라는 뜻
- 상위 클래스에서 존재하는 멤버를 변형하는 것을 재정의라고 함
- 재정의를 하려는 멤버에는 override 키워드를 붙임
- 저장 속성은 재정의 불가
- childClass에서는 parentClass의 데이터(저장속성)를 추가만, 기능(메서드)를 추가 및 변형(대체)만 가능하다.
- 즉, childClass는 parentClass의 메모리 구조를 깰 수 없기 때문.
- 자식 클래스의 메서드는 상위 클래스의 메서드 주소만 가져옴.
- 오버라이딩 시 변경됨
- 클래스의 저장 속성, 계산 속성이 Data영역에서 따로 존재하는 것을 기억하기
- UIKit에서의 예시

클래스 상속과 재정의
- 재정의 규칙
- 대원칙
- 저장 속성 재정의 불가
- 메서드는 재정의 가능(다만, 기능 확장만 가능)
- 저장 속성
- [원칙] : 재정의 불가
- 메모리 구조에서 상위 구현을 참조하기 때문에 재정의(변형) 불가능
- [예외] : 메서드 형태로 부수적 추가는 가능
- 메모리 구조를 건드리지 않는 형태로는 가능
- 읽기 / 쓰기 계산속성 형태로 재정의 가능(메서드 추가 형태로 구현)
- 속성감시자 형태로 재정의 가능 (실질적 단순 메서드 추가)
- [원칙] : 재정의 불가
- 계산 속성 (실질적 메서드)
- 계산속성의 재정의는 실질적 메서드 대체
- 확장 방식의 재정의 가능
- 읽기 → 읽기 / 쓰기 가능 (기능 확장 가능)
- 읽기/쓰기 → 읽기는 불가능 (기능 축소 불가능)
- 속성 감시자를 추가하는 재정의는 가능 (실질적 단순 메서드 추가)
- 속성감시자 부분 참고
- 생성자
- 기본적으로 상속되지 않고 재정의 원칙
- 다만 예외적으로 자동상속이 되는 부분이 있는데, 추후에 다룸
- 메서드
- 일반적으로 상위구현의 메서드를 대체 및 변형 할 수도 있으므로, 자유롭게 재정의 가능 (상위구현을 호출하는 경우도 많으니 주의)
- 대원칙
- 메모리 구조를 통한 이해
- 재정의 - 현재의 클래스에 맞게 상위 멤버를 변형시켜서, 사용 하려는 것
- 대원칙
- 저장 속성 재정의 불가
- 메서드는 자유롭게 재정의 가능(다만, 기능 확장만 가능 - 기능 축소 불가의 의미)
- 재정의를 하지 않아도, 상속에서는 당연히 모든 멤버의 상속이 일어남
- 저장 속성은 실제 인스턴스에 각각의 멤버별(속성별로) 저장공간이 있고, 변형하는 것이 불가 (상속의 기본 원칙)
- 메서드는 타입(데이터 영역)에만 배열형태로 주소값을 저장하며 존재하므로 각 상속단계에서 재정의 되고 대체 되는 것이 당연
반응형
'iOS > Swift' 카테고리의 다른 글
Swift No.18 (1) | 2024.01.23 |
---|---|
Swift No.17 (1) | 2024.01.23 |
Swift No.15 (0) | 2024.01.17 |
Swift No.14 (0) | 2024.01.16 |
Swift No.13 (0) | 2024.01.14 |