Swift 프로토콜과 Java 인터페이스 비교
Apple 개발자 페이지에서 iOS 튜토리얼을 보고 있습니다.
내가 보기엔 인 것 같다protocol그리고.interface거의 같은 기능을 가지고 있습니다.
둘 사이에 어떤 차이점이 있나요?
어떤 용도가 있을까요?
갱신필
네, 위의 링크를 읽었는데도 어떤 차이점과 사용법이 있는지 잘 모르겠습니다.protocol그리고.interface이런 질문을 할 때는 주제에 대한 간단한 설명을 듣고 싶습니다.매뉴얼에서 모든 것을 얻기가 어려울 수 있습니다.
기본적으로 프로토콜은 다음을 제외하고는 Java 인터페이스와 매우 유사합니다.
- 또한 Swift 프로토콜은 구현해야 하는 속성(예: 필드)을 지정할 수 있습니다.
- 스위프트 프로토콜은 변환 키워드를 사용하여 값/참조를 처리해야 합니다(프로토콜은 구조, 열거 또는 클래스에 의해 구현될 수 있기 때문입니다).
- 프로토콜 구성(Protocol Composition)을 사용하여 언제든지 프로토콜을 결합할 수 있습니다.이것은 오래된 스위프트를 대체합니다.
protocol<A, B>프로토콜 구성 방식입니다.예를 들어 프로토콜을 준수해야 하는 함수 매개 변수 선언Named그리고.Aged다음과 같이 합니다.
func wishHappyBirthday(to celebrator: Named & Aged) {}
이것들은 Java 개발자에게 있어서(또는 적어도 지금까지 내가 발견한 것) 바로 눈에 띄는 차이점들이다.여기에 더 많은 정보가 있습니다.
@Thomas Schar의 답변을 보완합니다.스위프트 프로토콜 마법은 확장에서 비롯됩니다.
- 신속한 프로토콜은 확장을 통해 구현 가능(Swift)
2) Java 8 인터페이스에는 디폴트 실장은 가능하지만 '소급적으로' 구현할 수는 없습니다. - Swift에서는 프로토콜 요구 사항을 "적극적으로" 추가할 수 있습니다.
(필요한 경우) 모든 클래스 또는 구조물에 구현합니다. - 스위프트 프로토콜은 일반 프로토콜(예: <..)을 따르지 않습니다.>) 커스터마이즈 패턴이지만, 타입 에일리어스 방식(어소시에이트 타입).처음에는 혼란스러울 수 있지만 피할 수 있습니다.
경우에 따라서는 "각 괄호 블라인드"가 발생할 수 있습니다. - Swift는 고급 유형 패턴 매칭을 통해 프로토콜 요구 사항 및 확장 기능이 적용되는 위치와 방법을 매우 구체적으로 지정할 수 있습니다.자바에서 올 때는 혼란스러울 수 있지만, 파워가 대단합니다.
- 속성/패램(예: 기념자: 프로토콜)에 대해 신속한 프로토콜을 구성할 수 있습니다.
몇 시간 동안 머리를 긁적거리게 된 한 가지는 모든 프로토콜이 속성 유형으로 사용될 수는 없다는 것입니다.예를 들어 typealias를 사용하는 프로토콜이 있는 경우 직접 속성 유형으로 사용할 수 없습니다(생각해 보면 일리가 있지만 Java에서는 userDao: IDao와 같은 속성을 가지고 싶습니다).
한 가지 덧붙이자면 다음과 같은 조합된 프로토콜을 확인하고 있기 때문입니다.
protocol <> 키워드와 함께 언제든지 프로토콜을 결합할 수 있습니다.
이것은 더 이상 사실이 아니다.이에 따라 https://github.com/apple/swift/blob/master/test/type/protocol_composition.swift
정답입니다.
func foo ( var1 : A & B ){}
언급URL : https://stackoverflow.com/questions/30859334/compare-protocol-in-swift-vs-interface-in-java
'source' 카테고리의 다른 글
| 경고: 문자열 리터럴과 비교하면 지정되지 않은 동작이 발생합니다. (0) | 2022.08.18 |
|---|---|
| Java에서의 Runnable 인터페이스와 Callable 인터페이스의 차이점 (0) | 2022.08.18 |
| Java의 Object 클래스에서 인터페이스를 상속합니까? (0) | 2022.08.18 |
| 이름 지정 시 mapGetters의 Vuex 사용자 지정 이름이 참입니다. (0) | 2022.08.18 |
| Larabel 컨트롤러에 BLOB 이미지 저장 (0) | 2022.08.18 |