[Swift] Protocol

2022. 2. 23. 19:25·iOS&Swift

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

'iOS&Swift' 카테고리의 다른 글

[iOS]PhotoKit 알아보기(1)  (0) 2022.11.20
[iOS] TextView Placeholder 구현하기  (0) 2022.11.01
[Swift] 객체지향(OOP)  (0) 2022.02.23
[Swift] 옵셔널 추출  (1) 2022.02.14
[Swift]Swift random(), randomElement() 함수 알아보기  (0) 2022.02.11
'iOS&Swift' 카테고리의 다른 글
  • [iOS]PhotoKit 알아보기(1)
  • [iOS] TextView Placeholder 구현하기
  • [Swift] 객체지향(OOP)
  • [Swift] 옵셔널 추출
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    비동기
    실버
    BFS
    PhotoKit
    코딩테스트
    코테
    구현
    회고
    재귀
    다이나믹 프로그래밍
    Property wrapper
    dfs
    photoUI
    Race Condition
    그리디
    이분탐색
    ios
    GCD
    알고리즘
    브루트포스 알고리즘
    챌린지
    탐색
    노드
    네부캠
    완전탐색
    동시성
    Combine
    백준
    photos
    Swift
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[Swift] Protocol
상단으로

티스토리툴바