본문 바로가기

개발/연구

C++, JAVA, C# 객체지향 언어들의 차이

다음 링크에서 더욱 자세한 내용을 확인하실 수 있습니다 !

https://dirtycoders.net/c-c-java-gaegcejihyang-eoneodeuleun-museun-caiilgga/

 

C++, C#, JAVA 객체지향 언어들은 무슨 차이일까?

서론 안녕하세요. 독자님들 ! 객체지향 언어라고 하면 떠오르는 몇 가지 언어가 있을 겁니다. C++, C#, JAVA는 그 중에서도 주요한 3개의 대표적인 언어인데요, 오늘은 이 세 언어의 차이점에 대해

dirtycoders.net

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

모든 언어는 각자의 개성과 특징이 있으며, 깊게 보면 탄생 배경에 비롯된 언어마다의 철학이 있다고 생각한다. C++JAVA, C# 또한 이러한 점에서 각자 다른 차이가 있다.

이러한 추상적인 차이가 아닌, 당장에 어떤 기술의 오픈소스 규모를 보아도 이 차이를 알 수 있다. 예를 들면, 영상처리를 개발 하게된다면 자연스레 OpenCV를 접하게 될 것이며 이것은 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 FrameworkJVM과 유사한 역할을 수행하며, 자바와 마찬가지로, 가비지 컬렉터(Garvage Collector)가 사용치 않는 영역을 자동으로 수집(kill, 해방)해준다.

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

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

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