Protocol

김윤홍·2024년 6월 16일
post-thumbnail

프로토콜

Protocol이란?

프로토콜은 약속, 규율, 규칙이라는 이야기가 많다. 프로토콜내부에 약속등을 정해 놓으면 프로토콜을 채택하는 클래스, 구조체, 열거형은 반드시 규칙에 따라 작성되어야 한다.

이 과정을 잘지키면 프로토콜을 채택하고 잘 준수했다고 한다.

따라서, 프로토콜은 메서드, 프로퍼티등의 청사진을 의미한다.

Protocol 사용예시

protocol SomeProtocol {
	var mustBeSettable: Int { get set } 		//프로퍼티 요구사항
    var doesNotNeedToBeSettable: Int { get }	//프로퍼티 요구사항 
    func someMethod() -> String					//메서드 요구사항
    init(parameter: Int)						//이니셜라이저 요구사항

}

위의 예시처럼 프로퍼티, 메서드, 이니셜라이저등 필요한 요구사항들을 정해줄 수 있다 SomeProtocol을 채택한 클래스, 구조체등은 반드시 준수해야함!

프로퍼티는 항상 var로 선언해야함!!

프로토콜의 프로퍼티 요구사항에서는 프로퍼티가 읽기 전용(get)인지, 읽기/쓰기 가능(get set)한지 명시합니다. 따라서, 실제 구현에서는 var로 선언해야 합니다.

struct SomeStruct: SomeProtocol {
	var mustBeSettable: Int
    var doesNotNeedToBeSettable: Int

    func someMethod() -> String {
        return "Hello, World!"
    }

    init(parameter: Int) {
        self.mustBeSettable = parameter
        self.doesNotNeedToBeSettable = parameter
    }
}

이 예제에서는 SomeStruct가 SomeProtocol을 채택하고 있으며, 프로토콜의 모든 요구사항을 충족시키고 있습니다. mustBeSettable과 doesNotNeedToBeSettable 프로퍼티를 구현했고, someMethod 메서드와 init(parameter:) 이니셜라이저도 구현했습니다.

프로토콜의 장점

프로토콜은 코드의 재사용성을 높이고, 서로 다른 타입들 간에 일관된 인터페이스를 제공함으로써 코드의 유연성을 증가시킵니다. 이를 통해 다양한 타입이 공통된 방식으로 상호작용할 수 있습니다.

또한, 프로토콜은 프로토콜 자체의 기본 구현을 제공할 수 있는 프로토콜 확장(Protocol Extension)을 지원합니다. 이를 통해 프로토콜을 채택한 타입들이 공통적으로 사용할 기본 동작을 정의할 수 있습니다.

1개의 댓글

comment-user-thumbnail
2024년 6월 16일

예?

답글 달기