기타

C++ vs Java vs C# 비교 (객체지향언어 비교)

ziwookim 2022. 11. 3. 02:15

JAVA, C++, C#은 모두 객체지향 언어(Object-Oriented Programming, OOP)이다. 논리와 연산, 제공하는 서비스는 비슷하다.

 

모든 언어는 각자의 개성과 특징이 있으며, 깊게 보면 탄생 배경에 비롯된 언어마다의 철학이 있다고 생각한다.

C++ JAVA, C# 또한 이러한 점에서 각자 다른 차이가 있다.

 

C++(1983)

C++의 초창기는 “C보다 더 좋은 언어를 목적으로 개발되었다고 사료된다. 사례로는 C++ C언어로 컴파일링 후 기계어로 다시 컴파일링되는 형식이었다. C는 마이크로 프로세서가 직접 기계어로 번역해주지만, C++ C언어에서 실행 가능한 파일로 만들어주는 셈이었다.

현재는 객체지향적 언어로 손꼽히고 있지만 C와 유사한 면이 많기에 어떠한 응용프로그램, 임베디드 등에도 만능 설계가 가능하다. 규격과 통제가 심하지 않은 특징 때문에 표준 규격이 매우 복잡한 편이다.

C++의 특징으로는 다중 상속이 가능하며, 자료형에 따른 템플릿, 연산자 오버로드 등이 있다. 이와 다음에 기술할 JAVA와 대비되는 특징은 많지만 하나의 예시로 다중 상속이 있을 것이다.

 

JAVA(1995)

자바는 다른 언어들과 다른 차별점을 두고 시작하는데, 자바 가상머신(Java Virtual Machine, JVM)이다. 가상머신이 바이트 코드라는 특수한 바이너리 형태로 변환해준다. 따라서, 자바를 실행하거나 컴파일링 하기 위해서는 이 자바 가상 머신이 필요한 셈이다. 컴파일 방식과 실행되는 환경에서부터 운영체제에 영향을 받는 C++과의 차이점이 있다. 또한, 자바는 뚜렷한 철학을 가지는데,

1.     객체지향 방법론을 사용해야 한다.

2.     같은 프로그램이 여러 운영 체제(마이크로프로세서)에서 실행될 수 있어야 한다.

3.     컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.

4.     원격코드를 안전하게 실행할 수 있어야 한다.

5.     다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

위는 자바의 5가지 핵심 목표이다. 또한, 언어에서 지원하는 서비스에서도 차이점을 보인다. 많은 사례 중 위 C++에서 언급했던 다중 상속을 금기시하며, 이유는 다이아몬드 꼴의 상속을 방지하기 위해서이다.

뿐만 아니라, 이건 개인적인 느낌인데 자바는 C++처럼 만능을 초점으로 두었다면, 자바는 효율성과 범용성 면에서 유리하다고 생각된다. JVM만 있다면 어떠한 운영체제에서든 실행이 가능하다는 이점이 있다.

 

C#(2000)

C#은 탄생부터 자바와 많이 비교가 된 언어이다. 애초에 C#은 자바와 C++에 영향을 많이 받아서 탄생하였으며, 자바 가상 머신과 유사한 실행 엔진이 있는데 .NET Framework JVM과 유사한 역할을 수행하며, 자바와 마찬가지로, 가비지 컬렉터(Garvage Collector)가 사용치 않는 영역을 자동으로 수집(kill, 해방)해준다.

C++과의 차이점이자 자바와 유사점은 전역 변수나 전역 함수가 존재하지 않고, 오로지 클래스 안에서만 선언되며, C++에서는 암시적인 형변환이 비교적 자유로웠지만 C#은 그렇지 못하다. 이러한 점들만 모아봐도, 자바와 매우 유사하다는 것을 알 수 있다.

 

자바의 JVM은 범용성이 매우 뛰어나다. 그 이유는 자바의 핵심목표에서도 볼 수 있는데, 다양한 플랫폼에 구애받지 않으며 개발을 할 수 있다는 점은 코드의 재활용성을 극적으로 사용할 수 있다는 장점이 있다. 그렇지만, 사람의 언어와 가까워질 수록 컴파일의 성능이 낮아지듯, 자바 또한 마찬가지이다. C# MS Windows OS기반이로 가지는 여러가지 강력한 장점으로 둔다면, 자바는 다양한 플랫폼(운영체제나 어떠한 환경등을 의미한다.)을 쉽게 강력하게 활용할 수 있다는 차이점이 있다.

 

C#도 웹에서 장악력이 있지만, 자바의 프레임워크인 스프링의 장악력을 무시할 수 없다. 자바의 활용성 때문인데, C#은 웹 플랫폼의 한계가 아닌 MS사의 Windows 내의 그래픽 파워를 강력하게 커버할 수 있다는 장점으로 게임 개발에도 많이 개발된다. 여기서 게임 개발에서 유명한 유니티도 C#기반이다.

 

C#  vs Java의 차이점

Java와 C#에는 많은 유사점이 있지만 기본적인 차이점은 목적이다. C#은 Microsoft가 Java와 유사한 자체 언어를 갖기를 원했다.

Java는 대규모 오픈 소스 커뮤니티에서 지원을 받는다.

 

1) C#은 CLR 또는 공용 언어 런타임에서 실행되도록 설계되었으며, Java는 JRE 또는 Java Runtime Environment의 도움을 받아 JVM 또는 Java Virtual Machine에서 실행되도록 설계되었다.

3) Java는 복잡한 웹 애플리케이션 개발에 사용되는 반면,  C#은 웹 및 게임 개발 모두에 유용하다. C#을 사용한 모바일 개발도 매우 인기가 있다.

4) Java는 플랫폼 간 호환성을 위해 매우 유연하고 효율적이다. C#은 플랫폼 간 호환성에서 Java와 비교할 때 효율적이지 않다.

5) Java는 확인 됨과 확인되지 않음과 같은 예외를 명확하게 구분한다. 반면에 C#은 단일 유형의 예외만 제공한다.

6) 오픈 소스 특성으로 인해 Java에는 기능을 매우 신속하게 개발하는 데 도움이되는 방대한 라이브러리 생태계가 있다. C# 라이브러리는 Microsoft 에코 시스템으로 제한되므로 기능이 제한된다.

7) Java는 서버 측 상호 작용이 주요 기능이고, C#도 서버 측 언어를 제공하지만 적절한 프로그래밍 기능을 제공 할 때 매우 유용하다.

 

Java vs C #의 표 형식 비교

 

C# Java
C #은 CLR에서 실행된다. Java는 JVM에서 실행된다.
C #을 실행하려면 .Net 프레임 워크가 필요하다. Java에는 JDK가 필요하다.
C #은 모바일 개발과 함께 웹 및 게임 개발을 모두 개발하는 데 사용할 수 있다. Java는 주로 복잡한 웹 응용 프로그램을 디자인하는 데 사용된다.
Java만큼 효율적이지 않다. 매우 효율적이고 유연하며 교차 플랫폼과 호환된다.
단일 유형의 예외를 제공한다. 검사 및 검사 취소 예외를 모두 제공한다.
라이브러리 개발 및 업데이트는 Microsoft에 따라 다르다. 오픈 소스 특성으로 지속적인 개발 및 업데이트가 가능하다.

 

결론

 

대규모 커뮤니티에서 지원하는 Java는 새로운 프레임 워크와 라이브러리, 심지어 여러 도구를 만들어 지속적으로 발전하고 있다. Groovy와 같은 다른 언어도 Java를 기반으로 등장했다. Java 기반 Android도 가장 인기있는 모바일 OS 중 하나가되었다.

C#은 주로 .Net 프레임 워크 기반 구현에 사용된다. C#에서 개발 된 응용 프로그램은 Microsoft 환경에서 더 잘 작동하며, 업그레이드 할 때마다 다른 환경에 동일한 효율성을 제공하는 새로운 라이브러리와 도구가 추가된다.

C#과 Java는 몇 가지 유사점과 몇 가지 차이점이 있다. 애플리케이션 개발을 위해 이 둘 사이에서 언어를 선택하는 것은 대부분 플랫폼 종속성으로 귀결된다. 그러나 둘 다 비슷한 기능을 가지고 있으며 사용, 플랫폼, 요구 사항 및 유지 관리 용이성을 기반으로 선택 결정을 평가해야한다.

 

출처

https://2kiju.tistory.com/50

https://ko.myservername.com/pokemon-eun-musi-musihan-balgyeon-yeongsang-bidiowa-hamkkei-muttleycheoleom-boineun-joh-eun-gaeleul-sogaehabnida

'기타' 카테고리의 다른 글

CI/CD란?  (0) 2022.12.12
Openstack이란?  (0) 2022.11.09
제어의 역전 (Inversion Of Control, IoC)  (0) 2022.11.03
프레임워크와 라이브러리 비교 (Framework vs Library)  (0) 2022.11.03
[데이터베이스] 트랜잭션의 ACID 성질  (0) 2022.11.02