언어별 차이를 비교하는 글을 보다 흥미로운 부분이 있어서 가장 흥미로웠던 부분만 발췌를 해본다.
C언어 vs Java
-
자바는 탄생 후 수십 년이 지난 지금까지 여전히 기업 소프트웨어 개발의 주축이며
전반적인 개발의 대표 주자이기도 하다. -
아파치 소프트웨어 재단 프로젝트의 대다수를 포함해서
가장 중요한 기업 소프트웨어 프로젝트의 상당수가 자바로 작성됐으며
엔터프라이즈급 요구 사항이 있는 새로운 프로젝트를 개발할 때 여전히 유력한 언어다.
-
자바 구문은 C와 C++에서 상당 부분을 차용했다.
-
그러나 C와 달리 자바는 기본적으로 네이티브 코드로 컴파일되지 않는다.
-
대신 자바 런타임 환경, JVM, JIT(Just-In-Time)가 대상 환경에서 실행되도록 자바 코드를 컴파일한다.
-
적절한 조건 하에서 JIT로 컴파일된 자바 코드는 C의 성능에 근접하거나 넘어서기도 한다.
-
또한 “한 번 작성해서 모든 곳에서 실행한다”는 자바의 기본 원칙 덕분에
자바 프로그램은 비교적 적은 조정을 거쳐 다양한 대상 아키텍처에서 실행할 수 있다. -
C는 상당히 많은 아키텍처로 이식되긴 했지만
C 프로그램을 예를 들어 리눅스에서 윈도우로 가져와서 적절히 실행하려면 이런저런 맞춤 작업이 필요한 경우가 많다. -
이러한 이식성과 강력한 성능의 조합, 그리고 방대한 소프트웨어 라이브러리 및 프레임워크 생태계 덕분에
자바는 기업 애플리케이션 빌드에서 가장 선호되는 언어이자 런타임이다.
-
자바가 C에 비해 떨어지는 부분은
기계와 근접한 위치에서 실행되거나 하드웨어를 직접 다루는 경우인데,
이는 애초에 의도된 자바의 주력 분야가 아니다. -
C 코드는 기계 코드로 컴파일되어 프로세스에 의해 직접 실행된다.
-
자바는 중간 코드인 바이트코드로 컴파일되며
JVM 인터프리터가 이 바이트코드를 기계 코드로 변환한다. -
또한 자바의 자동 메모리 관리는 대부분의 환경에서 유용하지만
제한된 메모리 리소스를 최적으로 사용해야 하는 프로그램에는 C가 더 낫다.
-
그래도 자바가 속도 측면에서 C에 근접하는 영역이 몇 가지 있다.
-
JVM의 JIT 엔진은 프로그램 동작을 기반으로 런타임에 루틴을 최적화해서
사전 컴파일되는 C에서는 불가능한 다양한 종류의 최적화를 실현한다. -
또한 자바 런타임은 메모리 관리를 자동화하는데,
일부 새로운 애플리케이션은 이를 우회하여 작동한다. -
예를 들어 아파치 스파크는 JVM을 피해가는 맞춤형 메모리 관리 코드를 사용해서 메모리 내 프로세싱을 최적화한다.