이해한 부분에 대한 것만 정리.


유사점

1. C++과 Java 모두 클래스의 객체를 인스턴스화 하지않은 static 메서드 또는 함수를 지원한다.


2. C++과 Java 모두 Overloading(다중 정의) 생성자를 제공한다.



차이점

1. Java는 전처리기, typedef, enum, defined를 지원하지 않는다. (enum은 Java 1.5부터 지원함)


2. Java는 클래스(class)를 지원하지만 구조체(struct)와 공용체(union)을 지원하지 않는다.


3. 모든 Java 클래스의 최상위 클래스는 Object 클래스이다. (즉, 모든 Java 클래스는 Object 클래스를 상속한다.)


4. Java에서 선언하는 모든 함수 또는 메서드모두 클래스 선언 내에 포함된다.


5. 'Interface' 키워드는 자바에서 제공한다. C++에서는 제공하지 않는다.

(그러나 최근에 interface class 라는 기능이 C++에도 구현되어 순수 가상 함수만으로 정의하던 방식이 바뀌는 듯 하다.)


6. Java는 다중상속을 지원하지 않는다. 

(다중상속에 관한 수많은 이슈들이 있다. 이에 대해 검색해볼 것.)


7. C++은 배열의 index 범위를 초과하면 이를 판단할 수 없지만 Java는 배열의 사이즈 값을 가진 length 멤버 변수를 지닌

객체를 배열로 제공하기에, 배열의 범위를 넘어서면 이를 index bound 예외를 발생시킨다.


8. Java는 포인터를 지원하지 않는다. 포인터를 지원하지 않으므로 -> 연산자 역시 사용하지 않는다.


9. C++에서 char 타입은 1 byte, Java에서 char 타입은 2 byte이다.


10. Java에는 소멸자가 없다. 대신 훨씬 더 강력한 Garbage Collector(가비지 콜렉터)가 존재한다.


11. Java에서는 virtual 키워드가 없다. Java는 static 함수가 아닌 모든 함수는 언제나 동적 바인딩 사용.


12. Java에는 final이란 키워드가 존재한다. final 선언은 다중 정의가 될 수 없으며 정적으로 바인딩 됨을 의미한다.



*정적 바인딩과 동적 바인딩의 의미는 함수 또는 메서드를 컴파일 시에 아니면 실행 시에 그 의미를 부여한다는 것.

정적이나 동적 모두 결국의 의미는 컴파일 시인지, 실행 시인지 나타낸다. 이를 잘 이해하여야 한다.

C++에서 virtual 키워드가 붙는다면 이는 정적 바인딩이 아닌 동적 바인딩을 하겠다는 의미이다.



*최소한 색으로 칠한 단어나 굵게 칠하고 밑줄 그은 부분만큼은 잊지말자.



+ Recent posts