(구) 자료/면접을 위하여

[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를 사용해 다중 상속의 흉내는 낼 수 있음.

7) 인자 전달 방법의 차이

JAVA는 오로지 Call by Value만 가능하다.