Java 공부를 시작해보려 한다.
부끄럽게도, 게임 개발에 C++이 주로 사용된다는 것에 안주해서 Java 책을 사놓고도 한 번도 제대로 보지 않았다. (반성)
시작 전에, 나에게 익숙한 C++과 Java의 차이점에 대해 알고 가려고 글로 정리해본다.
*사전지식
- C++은 "C with Classes" 를 모토로 절차지향적 언어인 C를 객체 지향적 언어로 발전시킨 것이다.
- C++은 객체 지향적 언어로, 다형성, 다중 상속, 정보 은닉의 특징이 있다.
- Java는 "Writing Once, Using Everywhere" 을 모토로 만들어진 객체 지향 언어 이다.
- C++은 컴파일러를 사용해 플랫폼에 비독립적이고, Java는 인터프리터를 사용하기 때문에 가상머신이 깔려있는 플랫폼에서라면 플랫폼에 독립적이다.
- 위의 특성으로 C++은 주로 임베디드 소프트웨어, 속도와 메모리가 중요한 게임 업계에서 많이 쓰이고, Java는 주로 웹서비스, 안드로이드 프로그래밍에 많이 쓰인다.
*알게된 것.
토픽 | Java | C++ |
설계 목표 | 보안, 이식성, 빠른 개발 | 속도, C언어와의 하위 호환성 |
컴파일 | 가상머신 바이트 코드 | 각 머신에 맞는 기계어 |
기능 |
빠른 개발을 위해 프로그래머가 손수 메모리를 비우는 방법 대신 가비지 컬렉션을 사용. |
C와의 하위 호환성 (C언어는 애초에 Unix 운영체제를 만들기 위해 만들어진 언어로, 하드웨어를 제어할 수 있도록 만들어져 있다.) 을 위해 프로그래머에게 1. 메모리 관리 제어 2. 포인터 3. 전처리기 등 의 기능을 컨트롤 하게 한다. |
객체 전달 방식 | Call by value만 가능 | 값, 참조, 포인터 등등 데이터 전달 많다. |
자동 Casting | 제너렉, 오토박싱 같은 기능으로 자동 Casting 지원 | 지원. |
함수 |
모든 함수가 가상 함수. 레퍼런스 유형이 아니라 객체 유형에 따라 메소드 구현이 결정된다. |
가상 함수를 별도로 선언해 줘야 한다. |
데이터형 크기 | 원시 데이터형의 크기가 정의되어있음. | 구현에 따라 데이터형의 크기가 달라진다. |
다중 상속 | 지원 x | 지원 o |
friend 키워드 (은닉성 파괴) |
지원 x | 지원 o |
Interface 지원 |
이를 통해 다중 상속 흉내 상수와 가상함수로만 구성되어 있다. |
지원 x |
메모리 할당 | 메모리의 Heap 영역에만 할당 |
Heap, Stack 영역 모두에 할당. C++엔 NEW 키워드를 통해 hEAP영역에 동적할당, 일반적인 변수는 모두 Stack영역에 할당되었다. |
메모리 해제 | Heap 영역 메모리 헤제가 가비지 컬렉션에 의해 자동으로 해제 된다. | 소멸자를 통해서 프로그래머가 직접 메모리 해제해야 한다. |
연산자 오버로딩 | 지원x | 지원o |
익명 클래스 |
인터페이스의 메소드 중 하나만 재정의 하고 싶을 때 사용되는 JAVA의 기능. 클래스의 선언과 객체의 생성이 동시에 이루어 진다. |
지원x |
바인딩 |
동적 바인딩 |
정적 바인딩, virtual 키워드를 이용한 동적 바인딩 |
출처 및 참고
1. https://showmiso.tistory.com/252
2. https://preamtree.tistory.com/6
3. https://m.blog.naver.com/ws6263/100198938111
2019.12.15 뭔가 더 추가해야될거같은데 지금 너무 귀찮다.
'Deperecated > JAVA' 카테고리의 다른 글
JAVA관련 토막 지식. (0) | 2019.12.19 |
---|---|
JAVA 기본서 공부 - 4 <연산자> (0) | 2019.12.19 |
JAVA 기본서 공부 -3 <상수> (0) | 2019.12.19 |
JAVA 기본서 공부 -2 <변수&자료형> (0) | 2019.12.19 |
Java 기본서 공부 - 1 <자바 개발환경> (0) | 2019.12.15 |