Objective-C는 훌륭한 객체 지향성, 단순성, 우아함 및 (C의 상위 집합으로) 낮은 수준의 기능을 제공합니다. 많은 사람들이 Go에서 찾고 찾으려고하는 C ++의 단순하고 현대적인 대안처럼 보일 수 있습니다. 그러나 Cocoa 및 NextSTEP 환경 이후에 사용되며,이 경우에도 최적의 선택보다는 역사적 이유로 부담으로 여겨집니다.
왜 더 널리 사용되지 않습니까? 무엇이 문제입니까?
Objective-C는 훌륭한 객체 지향성, 단순성, 우아함 및 (C의 상위 집합으로) 낮은 수준의 기능을 제공합니다. 많은 사람들이 Go에서 찾고 찾으려고하는 C ++의 단순하고 현대적인 대안처럼 보일 수 있습니다. 그러나 Cocoa 및 NextSTEP 환경 이후에 사용되며,이 경우에도 최적의 선택보다는 역사적 이유로 부담으로 여겨집니다.
왜 더 널리 사용되지 않습니까? 무엇이 문제입니까?
답변:
Objective-C의 문제인 IMO는 사소한 단점 (특히 초기)과인지 된 이점의 부족만큼 큰 단점이 아닙니다.
Objective-C는 순수한 C의 상위 집합이므로 C 코드 는 Objective-C로 쉽게 전환 할 수 있습니다. 그러나 Objective-C 를 사용 하는 사고 방식 은 C 사고 방식과 많이 다릅니다 . C에서 Objective-C 로의 전환은 코드에서는 쉽지만 많은 프로그래머에게는 쉽지 않습니다. AC 프로그래머는 Objective-C에서 몇 가지 새로운 편의 기능을 쉽게 선택할 수 없으며 거의 즉시 생산성을 향상시킬 수 없습니다.
C ++은 일부 코드의 전환을 좀 더 어렵게 만들었지 만 대부분의 프로그래머의 전환은 훨씬 쉬워졌습니다. 코드의 모든 세부 사항을 다루는 데 익숙한 C 프로그래머는 C ++에서 원하는 정도로 정확하게 그렇게 할 수 있습니다. C ++은 또한 사고 방식을 바꾸지 않고도 새로운 기능 (예 : ctor를 추가하여 구조체 멤버를 자동으로 초기화)을 쉽게 사용할 수 있도록했습니다. 많은 OO 순수 주의자 들은 사고의 급격한 변화를 촉발 했지만, 많은 C 프로그래머들은 (적어도 즉시, 그리고 종종 외모에서) 아무 것도하지 않고 C ++로 전환했습니다.
C ++은 또한 대부분의 C 프로그래머에게 훨씬 친숙해 보였습니다 . 몇 가지 새로운 키워드를 추가했지만 코드는 여전히 상당히 친숙하게 보입니다. "순수한 수퍼 세트"상태에도 불구하고 대부분의 Objective-C 코드 는 대부분의 C 프로그래머에게 상당히 외모로 보입니다 . C에서 많은 것들이 C에서 어떻게 작동하는지에 관해 설명하고 이해하기가 상당히 쉽습니다. Objective-C로 전환하는 것은 "나를 믿고 당신이 알고 있다고 생각하는 모든 것을 잊어 버리는 것보다 훨씬 더 많은 장소를 가지고 있습니다. "
Objective-C의 많은 디자인 결정은 특히 느린 프로세서, 제한된 메모리 등을 가진 상대적으로 오래된 컴퓨터에서 C ++보다 느리게 만들었습니다. 옳고 그름은 주로 단일 회사 제품으로 여겨졌습니다. C ++은 모든 사람과 모든 사람이 자유롭게 구현할 수 있습니다.
이 모든 것들로 인해 C ++은 "임계 질량"을 상당히 빨리 달성 할 수있을 정도로 빨리 빨리 채택되었습니다. 따라서 (다른 것들 중에서도) 이미 널리 사용되고 널리 알려져 있기 때문에 많은 프로젝트에서 명백한 선택이되었습니다. 수량.
Objective-C는 그 시점에 도달하지 않았습니다. 사실, 애플이 시스템을 개발하고 싶은 사람에게 거의 강제로 적용함으로써 애플이 부활했을 때 모호해지기 시작했다. 애플의 시장 점유율은 그다지 큰 비중을 차지할 정도로 크지 않다. Apple이 그렇게하는 이유만으로 "기본"선택입니다.
또한 적어도 내 의견으로는 Objective-C의 Smalltalk와 같은 객체 모델은 사실상 C ++보다 Java와의 직접적인 경쟁자라는 것을 의미합니다. 예, 여전히 C 토대를 가지고 있으며 별도의 언어를 사용하지 않고도 저수준 코드를 작성할 수 있습니다. 그러나 순수한 C와 실제 Objective-C는 완전히 다른 두 언어보다 단일 언어보다 덜 다릅니다. 둘 다 단일 컴파일러로 처리됩니다 (두 사람이 JNI와 같은 것을 사용하지 않고 서로 대화 할 수는 있지만 편리합니다).
글쎄, 기본적으로 애플은 Objective-C의 원동력이다.
현재 Apple은 Objective-C를 완벽하게 제어하고 필요에 따라 언어를 구동하지만이 행성에는 Apple 이외의 장치에서 Objective-C를 실행하는 데 관심이있는 조직이 없습니다. .NET / Mono, C ++ 또는 Java가 제공하는 에코 시스템과 원격으로 경쟁 할 수있는 표준 라이브러리 및 툴킷부터 시작하십시오.