posted by REDFORCE 2017. 9. 5. 17:19

흔히들 대학과제로든 시험으로든 면접에서든

C++과 Java의 차이점에 대해서 기술해보라는 문제가 자주 등장한다.


최근 김포프님의 포프tv를 보면서 C++이 Java보다 어떤 점들이 다른지에 대해서

이야기를 들은 적이 있었는데, 궁금해서 구글에 뒤져보다보니


위키에 비교가 잘 정리되어 있어서 블로그에 옮겨적게 되었다.



1. 두 언어는 일단 설계 목표부터가 다르다.


 - 역사적으로 C++은 C를 확장하여 파생 된 언어이다. 절차적 프로그래밍 언어에 효율적인 실행을 목표로 설계 되었고, 정적 자료형 검사, 객체 지향 프로그래밍, 예외처리, RAII, 제너릭 프로그래밍을 지원한다. 범용 컨테이너와 알고리즘을 포함한 C++ 표준 라이브러리가 추가 되어있다.


 - JAVA는 임베디드 제품(가전 제품 등)에 탑재 되어 네트워크 컴퓨팅을 지원하기 위해서 만들어졌다. 항시 Java는 가상 머신 위에서 실행 된다는 특징이 있으며 안전성과 이식성이 높은 것이 장점이다. 하위 플랫폼을 완벽히 추가시켜주는 광대한 분량의 라이브러리를 가지고 있고, JAVA는 C와 비슷한 문법을 사용하나 직접적인 호환성은 없다.



2. 비교 표


 C++

JAVA 

 C 소스 코드와 하위 호환성

다른 언어와 소스 코드 호환성은 없음 

직접적인 시스템 라이브러리 호출 가능 

자바 네이티브 인터페이스를 이용 

저수준 시스템 접근 가능 

안전하게 보호되는 가상 머신 위에서 실행 

선택적 자동 경계 검사 

항상 자동 경계 검사함 

부호없는(unsigned) 연산 지원

부호 없는 연산 지원 안함 

값에 의한 매개변수 전달 또는 참조에 의한 매개변수 전달 

항상 값에 의한 매개변수 전달. 매게변수로 객체에 대한 참조값을 사용할 수는 있다. 참조 대상의 내용을 변경할 수는 있지만 참조값 자체는 변경할 수 없다. 메서드 호출 후에도 참조하는 객체는 다른 객체로 바뀌지 않을 것이다.

명시적 메모리 관리, 가비지 컬렉션은 추가적으로 라이브러리를 이용해야 함 

항상 자동 가비지 컬렉션 

명시적인 자료형 재정의 허용 

자료형 안정성에 엄격함 

C++ 표준 라이브러리는 적절한 범위까지 지원함

광대한 분량의 라이브러리 

연산자 오버로딩 

연산자 재정의 할 수 없음 



그 외에도 방대한 내용을 적을 수 있을 정도로 차이가 있으나...

기본적으로는 위 사항 정도만 숙지하고 있어도 어느정도 큰 차이점들은 알 수 있을 것으로 생각한다.


더 자세한 차이 점에 대해서는 아래 위키에서 참조!!


위키백과 - 자바와 C++의 비교