(구) 자료/면접을 위하여
[7] C++, JAVA의 차이를 한 눈에 정리.
뜐뜐뜐
2018. 5. 8. 14:43
C와 C++은 [1]편에서 정의했으니까 패스하고, 그렇다면 C++과 JAVA의 차이점이 뭔지 정확히 알고가보자.
모든 내용은 [곰150님 블로그]를 참고하여 제가 보기 쉽게 정리해논 것임을 밝힙니다.
C++과 JAVA, 무엇이 다른가?
1) 설계 목표
JAVA : 설계할 때, 보안과 빠른 이식성에 집중했다.
C++ : 속도, C와의 하위 호환성에 집중했다.
- C++은 절차지향언어인 C의 효율성 측면을 개선하기 위해 OOP(Object Oriented Programming)을 결합한 것이기 때문.
- OOP는 생각보다 완벽하지도 않고, 약점도 많다.
2) 클래스의 차이
JAVA : 기본 단위가 Class로, 거의 완전한 OOP라고 보면 된다.
C++ : C언어의 상위 호환이기 때문에 절차지향이 섞여있다.
3) 컴파일과 런타임의 차이
JAVA : 가상머신 바이트 코드로 컴파일 하며, 이를 실행 시키기 위해서는 가상 머신(JVM : JAVA Virtual Machine)이 필요함.
C++ : 각 운영체제(Windows, Linux, Mac)에 맞는 기계어로 컴파일함.
- 이게 C++이 JAVA보다 실행속도가 빠른이유가 된다.
4) 보안성
JAVA가 보안성이 더 높음.
Why? JAVA는 몇 가지 보안 메커니즘을 구현하여 잘못된 프로그램으로 인해 생기는 피해를 막아주도록 설계되어 있음.
5) 바인딩의 차이
JAVA : 동적 바인딩
- 런타임에 기반하여 Method를 호출.
- 별도의 데이터 관리가 필요하고, 불필요한 오버헤드가 붇을 수 있음.
C++ : 정적 바인딩
- 컴파일 타임에 함수 호출을 결정, 프로그램 실행 중 불필요한 오버헤드가 없음.
- 부모 클래스의 함수를 오버라이딩 하는 과정에서 정적 바인딩으로 인한 문제가 발생하기 때문에 virtual 키워드를 제공함.
Q) ?? 바인딩이 뭐죠
- 일반 함수를 정적 바인딩, 가상 함수를 동적 바인딩이라고 생각하면 됨.
정적 바인딩 : 컴파일 시, 어떤 함수를 호출할 지 결정.
동적 바인딩 : 런타임 중, 실행 코드가 결정이 됨.
Q) 각각의 장단점은?
동적 바인딩 : (장) 다형성(polymorphism)으로 인해 융통성을 갖게 됨. (단) 근데 실행속도가 미세하지만 느려짐
정적 바인딩 : (장) 실행속도는 동적 바인딩보단 빠름. (단) 근데 융통성이 적음.
6) 문법의 차이
C++ : C의 상위 호환으로서의 역할을 다하기 위해, 프로그래머에 의한 메모리 관리 제어, Pointer, Pre-Processor등의 기능을 전부 유지.
JAVA : 위의 기능 + 버그를 야기할 수 있는 쉬운 기능을 전부 제거
- C++에서는 동적으로 할당한 메모리는 직접 해제해야 하지만, JAVA는 Garbage Collector가 알아서 해제해줌.
- C++의 기능인 연산자 오버로딩, 다중 상속을 사용할 수 없음.
- 대신에 Interface를 사용해 다중 상속의 흉내는 낼 수 있음.