본문 바로가기

C++

[C++] C++과 JAVA의 차이점과 각 언어의 장단점

0. C++의 특징

  • 흔히 말하는 객체지향 언어의 특징들을 많이 사용한다.
  • 상속성, 캡슐화, 다형성(동적, 정적) 등의 기본적인 객체지향 언어의 특징을 지원한다.
  • 그러나 객체 지향 언어와 다르게, 클래스나 객체를 생성하지 않고도 컴파일 될 수 있다.
  • 그래서 반객체지향 언어라고도 불린다.

 

1. C++의 주요한 기능들

 

1-1 동적과 정적 메모리 할당

  • C++에서는 동적, 정적 할당이 둘 다 가능하다. 이는 사용자가 컴파일 시간(static memory allocation)과 실행시간(dynamic memory allocation)에 변수, 객체 등에 메모리를 할당할 수 있게 한다.
  • 동적 메모리 할당은 malloc(), calloc(), realloc() 등의 기능으로 구현 가능하다.

 

1-2 템플릿의 생성

  • C++의 템플릿은 제너릭 프로그래밍을 하게 지원한다. 템플릿을 이용해 제너릭 함수, 클래스 등을 만들고 이는 여러 가지 데이터 타입에 대해 특정 기능을 지원을 하게 할 수 있다.

 

1-3 연산자 오버로딩

  • 연산자 오버로딩은 사용자로 하여금 특정 연산자들이 원래 사용되던 기능이 아닌 변형하여 쓸 수 있게 한다.
  • 예를 들어 +는 두 숫자를 더하는 것이지만, 연산자 오버로딩을 통해 두 개의 문자열을 합치도록 할 수 있다.

 

1-4 람다 함수

  • [capture](parameters) -> return_type {funcion_body} 의 형태로 제공된다.

 

1-5 예외 처리

  • 에러의 타입을 알기 위해 디버그가 가능하다. C++은 'try', 'catch', 'final'을 이용한다.

 

 

2. Java의 특징

  • 현실 세계의 문제들을 해결하기 위해, 소프트웨어 애플리케이션을 만든다.
  • 적은 구현 종속성을 가지면서, 고급 객체지향 프로그래밍 언어로 설계되었다.
  • 자바는 WORA(Write Once Read Anywhere)를 지원한다. 
  • 즉 컴파일된 자바 코드는 재컴파일 없이 모든 플랫폼에서 실행 가능하다.
  • Applets, Servlets, JavaServer Pages 등을 지원하여 개발 용이성을 높인다.

 

3. C++와 자바의 차이점

 비교대상 C++ Java
프로그래밍 모델 절차 지향 프로그래밍과 객체지향 프로그래밍을 둘다 지원한다. 객체지향 프로그래밍만 지원한다.
플랫폼 종속성 C++은 플랫폼에 종속적이다.  Java는 플랫폼에 비종속적.
Write Once Run Anyewhere
주요 특징 연산자 오버로딩, Goto Statement, 구조체, 포인터, 유니온 등을 지원한다. Java는 연산자 오버로딩 , Goto statement, 구조체, 포인터, 유니온 등 지원하지 않는다.
컴파일과 인터프리션 C++은 컴파일만 가능 Java는 컴파일, 인터프리트 둘다 가능
라이브러리, 코드 재사용성 C++은 제한적인 라이브러리와 저레벨 함수기능 들을 가진다. 
C++은 기본적인 시스템 라이브러리 에 대한 직접 호출을 허용한다.
c++의 비해 많은 라이브러리와 코드 재사용성에 대한 지원이 많다. 

메모리 관리 C++은 메모리 관리를 수동으로 한다.  Java는 시스템이 메모리를 관리한다.
전역 범위(Global Scope) C++은 전역, 네임스페이스 범위를 지원한다. 자바는 전역 범위에 대한 지원은 없다.
접근 관리와 객체보호 지속적으로 보호되는 유연한 모델이 가능하다. 자바에서는 번거롭고, 약한 캡슐화를 권장한다.

 

4. C++와 Java의 장점

  • C++은 성능면에서는 Java보다 뛰어나다. (효율성, 빠른 속도, 동적 메모리 이용)
  • 게임 엔진이나, 빈번하게 매매가 일어나는 시스템에서는 C++가 유리하다.
  • Java는 사용성의 유연성에 있어서는 C++보다 더 뛰어나다. (소프트웨어 개발 면에서 뛰어남)

 

 

5. C++와 Java의 가장 큰 차이점

  • C++은 컴파일만 되지만, Java는 컴파일과 인터프리터 둘 다 지원한다.
  • C++은 컴파일러가 소스코드를 기계어로 변형하므로, 플랫폼에 종속적이다.
  • Java는 코드를 컴파일러에 의해 바이트코드로 변형되고, 자바 인터프리터가 바이트코드를 런타임에 실행시키고 결과를 생성한다.  

 

6. C++가 사용된 애플리케이션들

  • MySQL, 게임 개발
  • 구글 크롬 브라우저, 파일 시스템, 클러스터 데이터 처리
  • Adobe Premiere, 포토샾, 일러스트
  • 고급 계산, 그래픽 실시간 물리 실험, 고성능 이미지 처리
  • MRI 기계

 

7. 자바가 사용된 애플리케이션들

  • 데스크톱 GUI Application
  • 안드로이드, 모바일 애플리케이션 개발
  • 자바 애플리케이션들은 SIM 카드, disk players, TV 등에 임베디드 되어 있다.
  • Java EE는 API는 큰 기업 소프트웨어의 API, 런타임 환경 제공.
  • 네트워크 애플리케이션, 웹 서비스 (인터넷 연결, 웹 개발)

 

 

 

참고자료

https://www.interviewbit.com/blog/difference-between-cpp-and-java/

https://www.geeksforgeeks.org/similarities-and-difference-between-java-and-c/