iOS Swift 문법 - Protocol
포스트
취소

iOS Swift 문법 - Protocol

안녕하세요. narvis2 입니다.
이번시간에는 Swift 문법에 중에서도 Protocol에 대하여 알아보는 시간을 가지도록 하겠습니다.

🍀 Protocol


  • Kotlin 의 interface 와 비슷합니다.
  • 특정 작업 또는 기능에 적합한 메서드, 속성 및 기타 요구 사항의 Blueprint를 정의한다
  • Protocol 👉 요구사항
  • Protocol에는 구현 내용은 들어가 있지 않고, 채용한 타입이 직접 구현
  • Protocol을 채용한 형식은 요구사항을 반드시 모두 구현
  • ProtocolProtocol간 상속을 지원, class와 달리 다중 상속 도 지원
  • ℹ️ 사용 이유
    • swiftprotocol 지향 프로그래밍임
    • protocol 초기 구현이 protocol 지향 프로그래밍의 핵심
    • swift에서는 class상속이 가능하고 class참조 타입이므로 참조 추적에 비용이 많이 발생
      • 따라서 비교적 비용이 적은 값 타입을 활용하고 싶어도, 상속을 할 수 없으므로 때마다 기능을 다시 구현해 주어야 한다는 불편함이 있음
    • protocol을 사용하면 상속이라는 한계점을 탈피할 수 있음
      • 초기에 구현해 놓은 많은 propertymethod를 우리가 쉽게 채택하여서 사용을 할 수 있다는 큰 장점이 있음

☘️ Protocol property

  • Protocol에서 property(속성)를 정의할 때에는 getset 키워드를 사용해 property(속성)읽기 전용 property(속성)인지 쓰기 property(속성)인지를 반드시 명시 를 해줘야 함
    • {get, set} 👉 읽기 / 쓰기 property
    • { get } 👉 읽기 전용 property

예제 👇

1
2
3
4
protocol SomeProtocol {
    var mustBeSettable: Int { get set }
    var doesNotNeedToBeSettable: Int { get }
}

☘️ Protocol method

  • method 의 본문은 포함하지 않음

예제 👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protocol RandomNumberGenerator {
    func random() -> Double
}

class LinearCongruentialGenerator: RandomNumberGenerator {
    var lastRandom = 42.0
    let m = 139968.0
    let a = 3877.0
    let c = 29573.0

    func random() -> Double {
        lastRandom = ((lastRandom * a + c)
            .truncatingRemainder(dividingBy:m))

        return lastRandom / m
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.