[java] Swift의 프로토콜과 Java의 인터페이스 비교

Apple 개발자 페이지 에서 iOS 튜토리얼을 진행 합니다 .

나에게 보인다 protocolinterface거의 동일한 기능을 가지고있다.

  • 둘 사이에 차이점이 있습니까?

  • 프로젝트에서 다른 사용법?

업데이트

, 나는 위의 링크를 읽어했고, 나는 확실히 아직 어떤 차이와 사이에 사용하지 않아요 protocolinterface. 이와 같은 질문을 할 때 주제에 대한 간단한 설명을보고 싶습니다. 때로는 문서에서 모든 것을 얻는 것이 어려울 수 있습니다.



답변

기본적으로 프로토콜은 다음을 제외하고 Java 인터페이스와 매우 유사합니다.

  • 스위프트 프로토콜은 구현해야하는 속성 (예 : 필드)을 지정할 수도 있습니다.
  • 스위프트 프로토콜은 mutating 키워드를 사용하여 값 / 참조를 처리해야 합니다 (프로토콜은 구조체와 클래스로 구현할 수 있기 때문에)
  • 프로토콜 <> 키워드와 함께 언제든지 프로토콜을 결합 할 수 있습니다. 예를 들어, 프로토콜 A 및 B를 준수해야하는 함수 매개 변수를 다음과 같이 선언하십시오.

.

func foo ( var1 : protocol<A, B> ){}

이것들은 Java 개발자 (또는 적어도 지금까지 내가 찾은 것)의 즉각적인 차이점입니다.


답변

@Thomas Schar의 답변을 보완합니다. 스위프트 프로토콜 마법은 확장에서 비롯됩니다.

  • Swift 프로토콜은 확장 (Swift
    2)을 통해 구현을 얻을 수 있습니다 . Java 8 인터페이스는 기본 구현을 가질 수 있지만 “반복적으로”수행 할 수는 없습니다.
  • Swift에서는
    클래스 또는 구조 에 프로토콜 요구 사항 (및 필요한 경우 해당 구현)을 “반복적으로”추가 할 수 있습니다 .
  • 스위프트 프로토콜은 일반 (예 : <..>) 사용자 정의 패턴을 따르지 않고 유형별 체계 (예 : 연관된 유형)를 따릅니다. 시작시 혼동 될 수 있지만
    경우에 따라 “앵글 브래킷 실명”을 피할 수 있습니다 .
  • Swift에는 고급 유형 패턴 일치 기능이있어 프로토콜 요구 사항 및 확장이 적용되는 위치와 방법을 매우 구체적으로 지정할 수 있습니다. Java에서 올 때 혼란 스러울 수 있지만 많은 힘이 있습니다.
  • 속성 / 매개 변수에 대한 빠른 프로토콜을 구성 할 수 있습니다 (예 : 축하 자 : 프로토콜)

몇 시간 동안 머리를 긁적하게 한 것은 모든 프로토콜을 속성 유형으로 사용할 수는 없다는 것입니다. 예를 들어, typealias가있는 프로토콜이있는 경우 직접 속성 유형으로 사용할 수 없습니다 (생각할 때 의미가 있지만 Java에서는 userDao : IDao와 같은 속성을 원합니다).


답변