기타

[프로그래밍] C++과 JAVA의 차이점

sujin7837 2021. 12. 9. 09:46
반응형

C++과 JAVA는 객체지향이라는 점에서 비슷한 성격을 띄는 언어이지만 극명한 차이점이 존재합니다.

 

1. 상속

  • C++은 다중 상속을 지원하고 JAVA는 그렇지 않습니다.

'다중 상속'은 하나의 클래스가 두 개 이상의 클래스를 상속하는 것을 말합니다. 다중 상속을 지원하는 언어에서는 일반적으로 '다이아몬드 문제(Diamond Problem)'가 발생합니다.

다이아몬드 문제란 child 클래스의 정확한 상속 관계를 알 수 없어서 발생하는 문제입니다. 즉, 다중 상속시 어느 클래스의 메소드를 상속받아야 하는지 모호한 문제를 말합니다.

 

  • C++은 friend 키워드를 지원하고 JAVA는 그렇지 않습니다.

특정 class에 friend 키워드를 붙여서 클래스 혹은 함수를 선언하면, 명명된 클래스와 함수는 그 class의 private, protected area에 접근할 수 있습니다.

 

  • JAVA는 인터페이스(Interface)를 지원하고 C++은 그렇지 않습니다.

다중 상속을 지원하지 않는 JAVA는 Interface를 통해 다중 상속을 어느 정도 흉내낼 수 있습니다. JAVA에서는 하나의 class가 여러 개의 Interface를 Implement 할 수 있는데, Interface는 상수와 추상 메소드로만 구성되어 있으므로 여러 개의 Interface를 Implement 하더라도 다이아몬드 문제를 발생시키지 않습니다.

 

2. 문법 및 기능

  • C++에서는 연산자 오버로딩을 지원하지만 JAVA는 그렇지 않습니다. 
  • JAVA는 익명 클래스를 지원하지만, C++은 그렇지 않습니다.

익명 클래스는 말 그대로 이름이 없는 클래스입니다. 인터페이스의 메소드 중 하나만 재정의하고 싶을 때 자주 사용되며, 클래스의 선언과 객체의 생성이 동시에 이루어지는 형태를 띄고 있습니다. JAVA는 익명 클래스를 통해 '함수형 프로그래밍'의 형태를 어느 정도 흉내낼 수 있습니다.

 

  • JAVA는 동적 바인딩을 택하고 있지만, C++은 정적 바인딩을 택하고 있습니다.

그러나 C++이 정적 바인딩만 지원하는 것은 아닙니다. virtual 키워드를 통해 동적 바인딩도 지원할 수 있습니다.

 

3. 메모리 관리

  • JAVA는 객체를 메모리의 Heap 영역에만 할당할 수 있으나, C++의 경우 Heap과 Stack 영역 모두 할당이 가능합니다.

C++에서 new 키워드를 통해 객체를 생성하면 Heap 영역에 객체가 할당되고, 일반적인 변수 선언 방식을 이용하면 Stack 영역에 할당이 됩니다. JAVA에서는 일반적인 변수 선언 방식으로 객체를 생성할 수 없습니다.

 

  • JAVA는 메모리(Heap 영역) 해제가 자동으로 이루어지지만, C++은 프로그래머가 수동으로 해야합니다.

JAVA에서는 Garbage Collector가 미사용 객체 등의 자원을 자동으로 해제하며, 프로그래머는 수동으로 이를 조작할 수 없습니다. C++에서는 Destructor(소멸자)를 통해 메모리 해제가 가능합니다.

 

4. 기타

  • JAVA는 보안, 이식성, 그리고 빠른 개발에 비중을 두었고, C++은 속도와 C언어와의 하위 호환성에 중점을 두었습니다.
  • JAVA는 가상 머신 바이트 코드로 컴파일하며 실행시키려면 가상 머신이 필요하지만, C++은 각 머신에 맞는 기계어로 컴파일합니다.

 

출처 : https://preamtree.tistory.com/6, https://showmiso.tistory.com/252

반응형