http://www.gnustep.org/resources/documentation/Developer/Base/ProgrammingManual/manual_11.html#General



< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C. Objective-C, Java 및 C ++의 차이점 및 유사점

이 부록에서는 Objective-C와 Java의 차이점 / 유사점에 대해 설명합니다. GNUstep에 대한 Java 인터페이스 (JIGS, Java 및 Guile의 Programming GNUstep 참조)는 다루지 않지만 Objective-C를 배우고 Java를 이미 알고 자하는 사람들을 돕기 위해 포함되었습니다.


< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.1 일반

  • C 프로그래머는 몇 시간 만에 Objective-C를 배울 수 있습니다 (실제 전문 지식은 분명 더 오래 걸립니다).
  • Java는 세계 시장에서 인정 받고 있습니다.
  • Objective-C는 컴파일 된 OO 프로그래밍 언어입니다.
  • Java는 컴파일되고 해석되므로 Objective-C와 동일한 런타임 성능을 제공하지 않습니다.
  • Objective-C는 효율적이고 투명한 분산 객체를 특징으로합니다.
  • Java는 덜 효율적이고 덜 투명한 Remote Machine Interface를 특징으로합니다.
  • Objective-C는 공식적인 C 바인딩을 통해 기본 CORBA 호환성을 가지며 비공식적 인 Objective-C 바인딩을 통해 완벽한 호환성을 제공합니다.
  • Java는 공식적인 Java 바인딩을 통해 CORBA와 호환됩니다.
  • Objective-C는 거의 편재하지 않는 컴파일러 (gcc)를 통해 이기종 네트워크에서 이식 가능합니다.
  • Java는 소프트웨어 프로세서 또는 런타임 환경 인 클라이언트 측 JVM을 사용하여 이기종 네트워크에서 이식 가능합니다.

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.2 언어

  • Objective-C는 C 프로그래밍 언어의 상위 집합이며 비 OO 및 OO 프로그램을 개발하는 데 사용될 수 있습니다. Objective-C는 스칼라 유형, 구조 및 공용체에 대한 액세스를 제공하지만 Java는 소수의 스칼라 유형 만 처리하고 그 외 모든 것은 객체입니다. Objective-C는 C로 작성된 기존 소프트웨어 라이브러리에 대한 제로 비용 액세스를 제공하며, Java는 인터페이스를 작성해야하며 런타임 오버 헤드를 발생시킵니다.
  • Objective-C는 동적 유형 지정이 가능하지만 정적 유형 지정도 제공합니다. Java는 정적으로 유형이 지정되지만 정적 유형 지정의 몇 가지 한계를 해결하기 위해 유형 캐스팅 메커니즘을 제공합니다.
  • Java 도구는 원격 시스템에서 클라이언트로 클래스를 다운로드 할 수있는 범용 및 분산 된 이름 공간의 규칙을 지원합니다. Objective-C에는 그러한 규칙이나 도구 지원이 없습니다.
  • Java를 사용하면 클래스 정의를 확장하거나 논리 그룹을 추가하여 나눌 수 없습니다. Objective-C는이 문제에 대한 해결책으로 카테고리를 제공합니다.
  • Objective-C는 최소한의 프로그래밍 비용으로 위임 (단점없이 다중 상속의 이점)을 제공합니다. Java는 구현 된 위임에 대한 목적으로 작성된 메소드가 필요합니다.
  • Java는 메모리 관리를 위해 가비지 콜렉션을 제공합니다. Objective-C는 수동 메모리 관리, 참조 카운팅 및 가비지 수집을 옵션으로 제공합니다.
  • Java는 인터페이스를 제공하며 Objective-C는 프로토콜을 제공합니다.

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.3 소스 차이

  • Objective-C는 C를 기반으로하며 OO 확장은 Smalltalk와 비슷합니다. Java 구문은 C ++ 프로그래밍 언어를 기반으로합니다.
  • 객체 (및 런타임) 모델은 Java 구현이 Objective-C의 기능 하위 집합과 비교할 때 비슷합니다.

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.4 컴파일러 차이점

  • Objective-C 컴파일은 대상 시스템 / 환경에 고유하며 컴파일 된 본격적인 언어이기 때문에 Java보다 빠른 속도로 실행됩니다.
  • Java는 완벽하게 컴파일 된 Java가 가능하지만 대상 시스템에서 해석되는 바이트 스트림이나 Java 토큰으로 컴파일됩니다.

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.5 개발자 워크 벤치

  • Objective-C는 GUI 개발, 컴파일, 테스트 기능, 디버깅 기능, 프로젝트 관리 및 데이터베이스 액세스를 제공하는 GNUstep과 같은 도구에서 지원됩니다. 또한 문서를 포함하여 여러 유형의 프로젝트를 개발할 수있는 다양한 도구가 있습니다.
  • Java는 종종 C ++ 도구에서 유래 한 수많은 통합 개발 환경 (IDE)에서 지원됩니다. Java에는 소스 코드를 구문 분석하고 프로그램 주석을 기반으로 문서를 만드는 문서 도구가 있습니다. Objective-C와 비슷한 기능이 있습니다.
  • 자바가 널리 사용됩니다.
  • Objective-C는 이미 C 기반 도구에서 이루어진 투자를 활용할 수 있습니다.

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.6 장수명

  • Objective-C는 10 년 이상 동안 사용되어 왔으며 안정적이고 검증 된 상태로 간주되며 수시로 사소한 개선이 이루어졌습니다.
  • 자바는 끊임없이 진화하고 있습니다.

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.7 데이터베이스

  • Apple의 EOF 도구를 통해 Objective-C 개발자는 기존 관계형 데이터베이스 테이블에서 개체 모델을 작성할 수 있습니다. 데이터베이스의 변경 사항은 자동으로 인식되므로 SQL을 개발할 필요가 없습니다.
  • Java는 SQL 개발이 필요한 JDBC를 사용합니다. 데이터베이스 변경은 Java 코드에 영향을줍니다. 이것은 EOF보다 열등하다고 간주됩니다. 컨테이너 관리 지속성을 갖춘 Enterprise JavaBeans는 제한된 데이터베이스 기능을 제공하지만, 많은 추가 수하물이 함께 제공됩니다. 다른 객체 관계형 도구와 API는 Java 용으로 개발 중이지만 (2004 년 ca.), 이들 중 어느 것이 표준이 될지는 분명치 않다.

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.8 메모리

  • 오브젝트 할당의 경우 Java에는 JVM이 시작될 때 최대 크기가 설정된 고정 힙이 있으며 JVM이 재시작되지 않으면 크기를 조정할 수 없습니다. 이는 특정 시나리오에서 단점으로 간주됩니다. 예를 들어, 데이터베이스에서 읽은 데이터로 인해 JVM의 메모리가 부족 해지고 충돌 할 수 있습니다.
  • Objective-C의 힙은 OS와 런타임 시스템에 의해 관리됩니다. 이는 일반적으로 모든 시스템 메모리를 소모하도록 증가 할 수 있습니다 (프로세스 별 제한이 OS에 등록되지 않은 경우).

< ]> ]<< ]위로 ]>> ]맨 위 ]목차 ]색인 ]? ]

C.9 클래스 라이브러리

  • Objective-C : 일관된 API는 OpenStep 사양에 따라 정의됩니다. 이것은 GNUstep과 Mac OS X Cocoa에 의해 구현됩니다. 타사 API를 사용할 수 있습니다 (프레임 워크라고 함).
  • Java : API는 Sun Java Development Kit 배포에 의해 정의되고 구현됩니다. Java 구현의 다른 공급자 (IBM, BEA 등)도이를 구현합니다.
  • Java API는 하위 호환성을 유지하면서 여러 계층의 진화가 존재하기 때문에 복잡합니다. Collections, IO 및 Windowing은 복제 기능이 모두 불완전하게 분리되어 있으며 두 기능에 대한 지식이 필요합니다.
  • OpenStep API는 진화가 계속되는 결과이지만 별도의 라이브러리 버전이 있으면 이전 버전과의 호환성이 유지됩니다. 따라서 API는 깨끗하고 비 중복입니다. 스타일은 일관성이 있습니다.
  • OpenStep 비 그래픽 API는 약 70 개의 클래스와 약 150 개의 함수로 구성됩니다.
  • Java 비 그래픽 API의 상당 부분은 약 230 개의 클래스로 구성됩니다.
  • OpenStep 그래픽 API는 약 120 개의 클래스와 30 개의 함수로 구성됩니다.
  • Java 그래픽 API의 상당 부분은 약 450 개의 클래스로 구성됩니다.

<< ]>> ]맨 위 ]목차 ]색인 ]? ]

이 문서는 Adam Fedor 가 2013 년 12 월 24 일에 texi2html 1.82를 사용하여 생성했습니다.