문제

나는 우연히 우연히 발견했다. 단단한 원칙.한 가지 중요한 질문이 있습니다.항상 프로토콜을 사용해야 합니까?나는 Java 개발자가 사용하는 방식으로 누군가를 사용하는 것을 본 적이 없습니다.

나는 데모 프로젝트에서 그것을 시도했고 프로토콜에 대한 .h 파일과 헤더에 대한 또 다른 .h 파일로 끝났습니다.구현을 위한 .m 파일이고 때로는 UI를 위한 .xib입니다.

ObjC 개발자가 대리인에게만 프로토콜을 사용하는 이유가 있나요?나는 테스트 우선 접근 방식을 사용하는 ObjC 코드를 본 적이 없습니다.SOLID 프로그래밍이 ObjC에 적용됩니까?

도움이 되었습니까?

해결책

TDD는 OBJC 세계에서 대단히 인기가 없습니다. 공식 Apple SDK 라이브러리 중 일부를 살펴보고 TDD 옹호자가 혐오감을 포기할 수있는 패턴을 찾을 수 있습니다 ( iOS SDK에서 싱글 톤 objc와 잘 작동하는 패턴입니다). 일반적으로 단위 테스트는 일반적으로 공식 단위 테스트 스위트가 Xcode에 비교적 최근 에디션이고 아직도 3 차율 이유를 설명하는 이유를 설명합니다. objc 철학은 다음과 같습니다 :

"테스트를 작성하기 위해 코드를 더 복잡하게 만들지 마십시오. 간단한 코드가 디버깅하기가 더 쉽습니다."

TDD 녀석들은 의심 할 여지없이 딸랑 딸랑 딸랑 딸랑 딸린다.

objc는 Java Devs가 인터페이스하기 위해 수행하는 것보다 프로토콜에 대한 더 실용적인 접근 방식을 취합니다 ( "모든 클래스는 인터페이스와 구현이 있어야합니다!"라는 경우에 해당합니다.) :

  • 동일한 인터페이스로 여러 클래스가 필요하며 컴파일러의 도움말을 원하는 여러 클래스가 필요한 경우 프로토콜을 만들 수 있습니다.
  • 동일한 인터페이스로 여러 클래스가 필요하지만 컴파일러에서 지원을 상관하지 않으면 "비공식 프로토콜"을 사용할 수 있습니다 (처리 방법을 살펴보십시오. Gksession 객체 : 프로토콜이 아닌 메소드를 구현합니다.
  • 하나의 클래스 만 사용하려는 경우, 클래스를 사용하고 프로토콜을 잊어 버리십시오.

이는 대리인과 함께 사용 된 프로토콜 만 보는 경향이있는 것입니다. 특히 대리인 패턴이 매우 퍼지는 것처럼 필요한 기능을 구현하기 위해 둘 이상의 클래스를 만드는 유일한 장소 인 유일한 장소 인 경향이 있습니다. 다른 언어는 추가 기능을 제공하기위한 인터페이스를 하위 클래스하고 무시하거나 구현해야합니다. OBJC는 대신 대리인을 사용하는 경향이 있습니다.

OBJC가 동적 인 사실은 프로토콜 / 인터페이스의 많은 필요성을 제거합니다. Java, C ++ 및 C # 개발자는 모든 것을 분류하고 가능한 한 모든 것을 분류하고 입력 할 수 있도록 많은 시간을 보내고 인터페이스와 수업이 많습니다. 그것은 단순히 동적 언어에서 필요하지 않습니다 (그리고 C #에서 objc에서 C #에서 objc로 전환 된 이유 중 하나입니다. 즉, 유형 계층 구조를 설명하는 대신 시간 해결 문제를 해결할 수 있습니다).

objc는 동적이며 "Nofollow"> 오리 입력 메소드를 구현하는 경우"quack " "오리"프로토콜을 명시 적으로 준수하지 않고 해당 메소드를 호출 할 수 있습니다. OBJC의 우수한 메타 프로그래밍 기능 덕분에 객체 가이 메소드를 구현하는지 확인할 수도 있습니다.

다른 팁

SOLID 원칙은 그렇지 않습니다. 필연적으로 기술이나 프로그래밍 언어에 관계없이 모든 상황에 적용됩니다.하지만 많은 개발자들이 이를 준수하기로 선택했으며 Objective-C에서는 확실히 가능합니다.

테스트 우선 Objective-C를 보고 싶다면 다음을 살펴보세요. 찾아보기오버플로:UIKit과 네트워크 서비스를 활용하는 완전한 테스트 기반 앱입니다.실제로는 샘플 코드로 작성했습니다. 테스트 기반 iOS 개발, 그러나 원칙에 익숙하다면 코드를 보면 됩니다.코드가 테스트 기반이었음에도 불구하고 프로토콜로 가득 차 있지 않다는 것을 알 수 있습니다.

그 이유 중 하나는 "오리 타이핑"입니다.이전의 Smalltalk나 이후의 Ruby와 마찬가지로 Objective-C는 실제로 객체 유형이 무엇인지 상관하지 않고 메시지만 보냅니다.유형 안전 시스템은 전적으로 컴파일러 검사로 제한됩니다.따라서 원하는 대로 구체적으로 변수를 입력할 수 있으며 아직 (때때로 일부 캐스팅을 사용하여) 런타임에 다른 유형을 제공합니다.두 유형 모두 코드에 전달된 메시지에 응답하는 한 모든 것이 작동합니다.BrowseOverflow의 테스트는 프로토콜을 사용하여 입력되지 않은 변수에 대해서도 이를 사용하여 가짜 테스트를 전달하는 것을 볼 수 있습니다.

실제로 역사적 Objective-C와 Smalltalk(그리고 최신 Ruby)에서는 많은 공동 작업 개체가 전혀 형식화되지 않았습니다.오브젝티브-C에서는 id type은 "모든 객체"를 의미합니다.현재 ObjC에서는 덜 일반적이지만 Apple의 프레임워크 코드 중 상당수는 이것이 표준이었던 시절에 사용되었을 만큼 오래되었습니다.최신 프레임워크와 기존 프레임워크의 최신 API는 위임되지 않은 공동 작업자에 대해 더 엄격한 유형 및 프로토콜 유형을 사용한다는 것을 알 수 있습니다.

ObjC 개발자가 대리인에게만 프로토콜을 사용하는 이유가 있나요?

개인적인 선택.이러한 접근 방식을 따라야 할 근본적인 기술적 이유는 없습니다.

SOLID 프로그래밍이 ObjC에 적용됩니까?

예.아니면 오히려 그렇게 할 수도 있으며 많은 개발자가 SOLID 원칙을 따르기로 선택합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 softwareengineering.stackexchange
scroll top