C++와 JAVA을 비교하는 것은 대학에서 프로그래밍 언어를 배울 때, 얼핏 배우고 지나갔던 내용이었다. 비슷한 성격(객체지향)을 띄는 언어이지만, 차이점도 극명한 언어이기도하다. 

 

나름의 기준으로 3가지 기준으로 차이점들을 정리해봤다. 아, 그리고 여기에 작성되는 것들이 JAVA와 C++ 차이점의 전부는 아니라는 점 꼭 알아뒀으면 좋겠다. 그리고 나름대로 중요한 것만 뽑았지만... 아닐 수도 있다..

 

 

 

 

 

 

1. 상속

 대학 수업에서 교수가 학생에게 C++과 JAVA의 차이점을 묻는다면, 높은 확률로 학생은 상속에 관련된 차이점을 대답할 것이다. 그정도로 상속에 있어 두 언어의 차이점은 극명한데, JAVA가 C++보다 단순한 상속 체계를 지원한다. 

 

 첫째로, C++은 다중 상속을 지원하고 JAVA는 그렇지 않다. 여기서 '다중 상속'이라 함은, 하나의 클래스가 두개 이상의 클래스를 상속하는 것을 지칭한다. 다중상속을 지원하는 언어에서는 다이아몬드 문제(Diamond Problem)이 발생하는데, C++에서는 다이아몬드 문제를 회피할 수 있는 기능을 제공한다. 물론 JAVA에서는 애초에 발생할 일이 없다.



 둘째로, C++는 friend 키워드를 지원하고 JAVA는 그렇지 않다. 특정 class에 friend 키워드를 붙여서 클래스 혹은 함수를 선언해 놓으면, 명명된 클래스와 함수는 그 class의 private, protected area에 접근할 수있다. 하지만 이 방법은 객체의 은닉성을 파괴하므로 정말 특수한 경우가 아니면 사용을 지양한다.

 

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

 

※ 요약

 

1. C++은 다중 상속을 지원하나, JAVA는 지원하지 않는다.

 

2. C++는 friend 키워드를 지원하나, JAVA는 지원하지 않는다. friend 키워드는 은닉성 이슈로 사용을 자제한다.

 

3. JAVA는 다중상속을 지원하지 않는 대신 Interface를 지원한다. C++는 지원하지 않는다.



 

 

+ Recent posts