프로토콜, 익스텐션

ulls12·2023년 12월 12일
0

Swift TIL

목록 보기
14/60
post-thumbnail

프로토콜

  • 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등을 정의 해놓은 "규약" 혹은 "약속"
  • 프로토콜은 설계된 조건만 정의를 하고 제시를 할 뿐 스스로 기능을 구현하지 않는다
  • 프로토콜에는 이름, 타입, gettable, settable 을 명시한다
  • 프로퍼티는 항상 var로 선언해야 한다
  • 메서드를 정의할 때 메서드 이름과 리턴값을 지정할 수 있고, {} 구현 코드는 적지 않는다
  • 상속과 유사하다고 볼 수도 있겠지만 class 이외에 struct나 enukm도 프로토콜을 채택할 수 있다
  • 상속은 다중 상속이 불가능하지만 프로토콜은 다중 상속이 가능하다 ( 확장성이 높다 )
protocol Student {
	var studentID: Int { get set }
    var name: String { get }
    func printInfo() -> String
}
struct UnderGraduateStudent: Student {
    var studentId: Int
    var name: String
    var major: String
    func printInfo() -> String {
        return "\(name), whose student id is \(studentId), is major in \(major)"
}

익스텐션

  • 확장을 이용하여 structure, class, enum, protocol 타입에 새로운 기능을 추가할 수 있따
  • 기존 타입에 기능을 추가하는 수평 확장하는 개념
  • 확장은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없다
extension 확장할 타입 이름 {
	//타입에 추가될 새로운 기능 구현
}
  • Extension으로 구현 가능한 것들
  1. 새로운 계산 프로퍼티 추가
  2. 새로운 인스턴스/타입 메서드 추가
  3. 새로운 초기화 추가
  4. 프로토콜 채택
  5. 서브스크립트 추가
  6. 중첩 타입 추가
  • Extension으로 구현 불가능한 것들
  1. 저장 프로퍼티 추가
  2. 기존 기능의 재정의
  3. 초기화 메서드의 재정의
  4. 기존 타입의 저장된 프로퍼티에 기본값 설정
profile
I am 개발해요

0개의 댓글