프로토콜 Protocol

이하연·2021년 8월 15일
0

[Swift] 스위프트

목록 보기
12/27

프로토콜이란?

: 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진

  • 프로토콜은 조건만 정의를 하고 제시만 할 뿐, 스스로 기능을 구현하지는 않습니다.
  • 하지만 프로토콜에 정의한 프로퍼티, 메소드는 필수로 정의해야하는 조건입니다.
    • 프로퍼티를 정의할 때, get / set 키워드를 사용해 프로퍼티가 읽기 전용인지 읽기,쓰기 전용인지 반드시 명시
    • 메소드를 정의할땐 중괄호와 메서드의 구현이 없다는 점을 제외하고는 클래스와 구조체에서 정의했던 것과 동일
      • static 키워드를 사용함으로써 인스턴스 메소드나 타입 메소드가 되도록 정의 가능
  • 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다.
    • 값 타입인 구조체, 열거형일 경우, 메소드가 메소드 자신이 속해 있는 인스턴스를 변경하고자 의도하는 경우에는 반드시 메소드 정의부 앞부분에 mutating 키워드를 추가해야합니다.
    • 클래스만 @objc속성을 사용하는 프로토콜 채택이 가능합니다. @objc 키워드를 프로토콜 앞부분에 위치시켜 사용하면 프로퍼티나 메소드가 선택적으로 구현이 가능하다는 것을 의미합니다. ( 프로토콜 선택적 요구사항 정의 )
protocol 프로토콜_이름 {
		// 프로토콜_정의
}

protocol 과 extension의 결합

정의

  • 프로토콜을 정의할 땐 요구사항의 정의만 가능합니다.

구현

  • 프로토콜의 익스텐션 안에서 프로토콜이 요구하는 실제 기능을 구현해 줄 수 있습니다.
  • 다만, 익스텐션에서는 저장 프로퍼티는 구현해 줄 수 없으므로, 각각 타입에서 직접 구현해줘야 합니다.

예제

아래의 예제 보면, protocol로 값을 정의해준 후, extension을 통해 프로토콜이 요구하는 기능을 실제로 구현해주어서 class에 할당할 땐, 저장 프로퍼티(옵셔널) 값만 지정해준 것을 확인할 수 있습니다.

0개의 댓글