← 메인으로

0805-4 스위프트 프로토콜

클래스가 올바른 구조를 가지기 위해 스위프트 클래스가 반드시 따라야 할 특정 규칙은 기본적으로 없다. 하지만, 다른 클래스와 함께 작업을 해야 할 때는 특정 조건에 맞춰야 한다.

클래스가 충족해야 하는 최소한의 요구사항을 정의하는 규칙들의 집합을 프로토콜(protocol)이라고 한다.

다음 프로토콜 선언부를 살펴보자. 이 프로토콜을 채택하는 클래스는 이름의 읽을 수 있는 문자열 값에 대한 name이라는 프로퍼티와 매개변수를 받지 않고 문자열 값을 반환하는 buildMessage() 메서드를 반드시 포함해야 한다.

protocol MessageBuilder { var name: String { get } func buildMessage() -> String } 
class MyClass: MessageBuilder { } 
class MyClass: MessageBuilder { var name: String init(name: String) { self.name = name // self.name -> 클래스 프로퍼티 / name: init의 매개변수 } func buildMessage() -> String { "Hello " + name } } 

정리

프로토콜 = 약속(계약서) Swift에서 "누구든 이걸 따른다면, 반드시 이 조건은 지켜야 해!" 라고 정해놓는 규칙의 집합.

프로토콜을 왜 쓰는가?

  1. 팀 작업 / 재사용성을 위한 설계
    • 프로토콜은 "이 객체는 최소한 이 기능은 있어요!"라는 보장 장치
    • 예를 들어, 어떤 함수가 MessageBuilder를 받는다고 했을 때
    func printMessage(from builder: MessageBuilder) { print(builder.buildMessage()) // 무조건 이 메서드 있다는 걸 보장받음 } 
- builder가 진짜 어떤 클래스인지 몰라도 괜찮다. - 프로토콜 덕분에 buildMessage()는 항상 존재한다는 걸 알기 때문에, 걱정 없이 쓸 수 있다. 2. Swift의 강력한 타입 안정성 - Swift는 "내가 실행중에 오류 나는 걸 절대 용납 못해!" 라는 성격이 강한 언어. - 약속을 했으면 -> 반드시 지켜!