09. 확장
1) 확장(Extension)
- 확장을 이용하여 structure, class, enum, protocol 타입에 새로운 기능을 추가할 수 있습니다.
- 기존 타입에 기능을 추가하는 수평 확장하는 개념입니다.
- 확장은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없습니다.
- 외부에서 가져온 타입에 내가 원하는 기능을 추가하고자 할 때 확장을 사용할 수 있습니다.
- 예시 코드
extension 확장할 타입 이름 {
//타입에 추가될 새로운 기능 구현
}
extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3 {
//프로토콜 요구사항 구현
}
2) 확장(Extension)이 가능한 경우와 불가능한 경우
Extension으로 구현 가능한 것들:
- 새로운 계산된 속성(Computed Property) 추가
- 새로운 인스턴스/타입 메서드 추가
- 새로운 초기화(Initializer) 추가
- 프로토콜 채택(Protocol Conformance)
- 서브스크립트 추가(Subscripting)
- 중첩 타입(Nested Type) 추가
Extension으로 구현 불가능한 것들:
- 저장 프로퍼티(Stored Property) 추가: Extension으로는 저장 프로퍼티를 추가할 수 없습니다. 오직 계산된 프로퍼티만 추가할 수 있습니다.
- 기존 기능의 재정의(Override): 이미 존재하는 기능을 Extension에서 재정의(Override)할 수 없습니다. 상속과 재정의는 클래스에서만 가능합니다.
- 초기화 메서드(Initializer)의 재정의: Extension으로는 새로운 편의 초기화 메서드를 추가할 수 있지만, 기본 초기화 메서드 또는 지정 초기화 메서드를 재정의할 수는 없습니다.
- 기존 타입의 저장된 프로퍼티에 기본값 설정: Extension에서는 기존 타입에 저장된 프로퍼티에 기본값을 설정할 수 없습니다.
10. 제네릭
1) 제네릭
- 제네릭으로 구현한 기능과 타입은 재사용하기도 쉽고, 코드의 중복을 줄일 수 있다.
- 제네릭을 사용하고자 할 때는 제네릭이 필요한 타입 또는 메서드의 이름 뒤의 홀화살괄호 기호 사이에 제네릭을 위한 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시한다.
- 제네릭은 실제 타입 이름을 써주는 대신에 placeholder를 사용한다. [ eg: T, V, U ]
- placeholder는 타입의 종류를 알려주지 않지만 어떤 타입이라는 것은 알려준다.
- placeholder의 실제 타입은 함수가 호출되는 순간 결정된다.
- placeholder는 타입 매개변수로 쓰일 수도 있는데, 이 타입 매개변수는 함수를 호출할 때마다 실제 타입으로 치환된다.
- 하나의 타입 매개변수를 갖지 않고 여러 개의 타입 매개변수를 갖고 싶다면 홀화살괄호 기호 안쪽에 쉼표로 분리한 여러 개의 타입 매개변수를 지정해줄 수 있다. [ eg: <T, U> ]
- 제네릭 타입을 구현하면 구조체, 클래스, 열거형 등이 어떤 타입과도 연관되어 동작할 수 있다.
- 제네릭 타입을 정해주면 그 타입에만 동작하도록 제한할 수 있어 안전하고 의도한 대로 기능을 사용하도록 유도할 수 있다.
몬말인지 잘 모르겠,,,
'iOS (스파르타) > Swift 문법' 카테고리의 다른 글
문법 심화 - Combine 맛보기 (0) | 2024.06.12 |
---|---|
문법 심화 - 비동기와 네트워킹 (0) | 2024.06.12 |
문법 심화 - ARC와 메모리 누수 (0) | 2024.06.12 |
문법 심화 - 고차함수, 예외처리 (1) | 2024.06.11 |
문법 심화 - 클로저04 (0) | 2024.06.11 |