티스토리 뷰

Swift

[Swift] Protocol

Esiwon 2022. 2. 23. 19:25

Swift는 클래스를 이용한 추상화보단 구조체와 프로토콜을 통한 프로토콜을 권장한다.

프로토콜에 대해

  • 프로토콜이란, 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다.
  • 구조체, 클래스, 열거형은 프로토콜을 채택할 수 있습니다.
  • 프로토콜 내부에는 채택했을 시 꼭!!! 구현되어야만 하는 메서드, 프로퍼티, 이니셜라이저 등이 정의 및 제시되어 있습니다. 때문에, 프로토콜 스스로는 기능을 구현하지 않습니다.
  • 프로토콜은 다른 프로토콜을 상속받을 수 있고, 또한 다중 상속도 가능합니다. 자식 프로토콜은 부모 프로토콜에 제시된 기능은 중복하여 써줄 필요 없습니다.
  • 프로토콜 채택 시에는 ":"뒤에 프로토콜 이름을 작성하여 채택합니다. 클래스 상속과 같이 사용할 시에는 클래스를 먼저 상속하고 그 뒤에 ","를 이용하여 채택합니다.
  • 프로토콜의 장점은, 프로토콜을 채택 받은 타입은 빠르게 기능에 대한 유추가 가능하고, 구현하는 과정에서도 프로토콜에 제시된 기능은 놓치지 않고 구현해 줄 수 있습니다.

프로토콜의 구문은,

protocol 프로토콜 {
    // 정의
}

입니다.

사용의 예,

import Foundation

protocol Coordination
 {
    var top: String { get set }
    var pants: String { get set }

    init(top: String, pants: String)

    func checkCoordination()

}

protocol Hair {
    var hair: String { get }

    func checkHairStyle()
}

struct Person: Coordination, Hair {
    var top: String
    var pants: String
    let hair: String = "포마드"

    func checkHairStyle() {
        print("오늘의 헤어스타일은 \(hair)스타일")
    }

    func checkCoordination() {
        print("상의: \(top)\n하의: \(pants)")
    }

    init(top: String, pants: String) {
        self.top = top
        self.pants = pants
    }     
}

let safari: Person = Person(top: "긴팔", pants: "반바지")
safari.checkHairStyle()
safari.checkCoordination()
//오늘의 헤어스타일은 포마드스타일
//상의: 긴팔
//하의: 반바지

참고 자료: https://docs.swift.org/swift-book/LanguageGuide/Protocols.html

참고 영상: https://www.youtube.com/watch?v=cjCgJPo3VM4&t=318s

'Swift' 카테고리의 다른 글

[Swift] Swift Concurrency와 GCD  (1) 2022.12.14
[Swift] Race Condition과 Thread Safe  (0) 2022.12.12
[Swift] 객체지향(OOP)  (0) 2022.02.23
[Swift] 옵셔널 추출  (1) 2022.02.14
[Swift]Swift random(), randomElement() 함수 알아보기  (0) 2022.02.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함