Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에 없는 C++ 기능 14가지 총정리

C++와 자바(Java)는 문법적으로 닮은 점이 많지만, 설계 철학은 완전히 다른 언어입니다. C++가 성능과 저수준 제어를 중시하는 반면, 자바는 이식성과 안정성, 개발 편의성을 우선합니다. 그 결과 C++에는 존재하지만 자바에서는 의도적으로 제외된 기능들이 여럿 있습니다. 아래에서 항목별로 살펴보겠습니다.

메모리 및 데이터 타입 관련 차이

  • unsigned 정수 타입 부재: 자바에는 C++의 unsigned int 같은 부호 없는 정수형이 없습니다. 모든 정수 타입이 부호를 가집니다.
  • 소멸자(destructor)와 delete 연산자 없음: 자바는 가비지 컬렉터(Garbage Collector)가 사용하지 않는 객체의 메모리를 자동으로 회수하므로, 명시적인 소멸자나 delete 키워드가 필요 없습니다.
  • 포인터(pointer) 없음: 자바는 직접적인 포인터 연산을 지원하지 않으며, 참조(reference)만을 통해 객체에 접근합니다. 이는 메모리 안정성과 보안을 높이는 설계입니다.
  • sizeof 연산자 없음: 자바는 모든 플랫폼에서 기본 데이터 타입의 크기가 고정되어 있으므로, C++처럼 메모리 크기를 확인하는 sizeof 연산자가 필요하지 않습니다.

언어 구조 및 접근 제어 관련 차이

  • friend 클래스·함수 없음: C++의 friend 키워드를 통한 외부 클래스 접근 허용 기능이 자바에는 없습니다. 대신 패키지 수준의 접근 제어자로 유사한 효과를 낼 수 있습니다.
  • 전역 변수·전역 함수 없음: 자바는 순수 객체지향 언어로 설계되었기 때문에 클래스 밖에 존재하는 전역 변수나 전역 함수가 없습니다. 모든 코드는 클래스 내부에 작성해야 합니다.
  • :: 범위 지정 연산자 없음: 전역 변수나 전역 함수가 존재하지 않으므로, C++의 스코프 해석 연산자 :: 역시 자바에는 존재하지 않습니다.
  • typedef 없음: C++의 타입 별칭 선언 기능인 typedef가 자바에는 없습니다. 대신 클래스를 정의하거나 상속·래핑하여 유사한 목적을 달성할 수 있습니다.

코드 재사용 및 확장성 관련 차이

  • 템플릿(template) 없음: C++의 강력한 템플릿 기능은 자바에 그대로 존재하지 않습니다. 다만 자바 5부터 도입된 제네릭(Generics)이 타입 안정성을 갖춘 유사한 역할을 수행합니다.
  • 다중 상속(multiple inheritance) 불가: 자바는 하나의 클래스가 여러 클래스를 동시에 상속하는 것을 허용하지 않습니다. 다만 다단계(다층) 상속은 가능하며, 인터페이스(interface)를 활용해 다중 상속의 장점 일부를 대체할 수 있습니다.
  • 연산자 오버로딩(operator overloading) 없음: C++에서는 개발자가 연산자의 동작을 재정의할 수 있지만, 자바에서는 문자열 결합에 사용되는 + 등 일부 내장 사례를 제외하고 연산자 오버로딩을 지원하지 않습니다.
  • 디폴트 인수(default argument) 없음: 자바는 매개변수에 기본값을 지정할 수 없습니다. 대신 메서드 오버로딩을 통해 같은 이름의 메서드를 여러 형태로 정의하는 방식을 사용합니다.
  • 인라인 함수(inline function) 없음: C++의 inline 키워드로 짧은 함수를 코드에 직접 확장하는 기능이 자바에는 없습니다. 자바는 JIT 컴파일러가 실행 시점에 자동으로 최적화를 수행합니다.

기타 차이

  • 전처리기(preprocessor)와 매크로 없음: C++의 #include, #define 같은 전처리 지시문과 매크로 기능이 자바에는 없습니다. 자바는 컴파일 전 별도의 전처리 과정 없이 import 문과 상수(final 변수)로 대체합니다.

마치며

이렇게 자바에 없는 기능들이 많다는 점은 단순히 '부족하다'고 볼 수 없습니다. 포인터 제거, 가비지 컬렉션 도입, 전처리기 배제 등은 모두 메모리 안정성, 보안, 플랫폼 독립성을 위한 자바만의 설계 선택입니다. 반대로 성능을 극한까지 끌어올려야 하는 시스템 프로그래밍 분야에서는 C++의 이러한 기능들이 여전히 강력한 무기가 됩니다. 따라서 두 언어의 차이를 이해하고 프로젝트의 목적에 맞게 선택하는 것이 가장 중요합니다.