noname02

C, C++ 와 JAVA의 차이점 본문

Study

C, C++ 와 JAVA의 차이점

kimtaku 2015. 4. 14. 19:43

1. 형변환

변수 선언시 float a = 3.14 의 경우, C/C++은 자동 형변환으로 3.14를 float형으로 변환시키지만 JAVA는 컴파일 에러.

큰 자료형->작은 자료형 변환의 경우 C/C++은 컴파일러가 알아서 하지만(손실되지만) JAVA는 컴파일 에러.

단, 작은 자료형->큰 자료형의 경우 자동으로 형 변환




2. char형의 크기차이

C/C++은 1byte(ASCII코드라서) JAVA는 2byte(UNICODE라서)




3. const와 final

C/C++의 상수화는 const, JAVA는 final




4. 다차원배열

C/C++의 경우 5x3의 배열, 5x5의 배열 등 무조건 사각형 크기의 배열이 선언되지만

JAVA의 경우 행 성분이 각각 다를 수 있다.

즉 C/C++은


ㅁㅁㅁㅁㅁ

ㅁㅁㅁㅁㅁ

ㅁㅁㅁㅁㅁ


와 같아야 하지만 JAVA의 경우


ㅁㅁㅁㅁ

ㅁㅁ

ㅁㅁㅁ

ㅁㅁㅁㅁㅁㅁ


이 가능하다. 

이 말인 즉슨, C/C++은 값이 입력되지 않은 곳은 초기화에 따라 default값이 들어가거나 더미값이 들어가지만

JAVA의 경우에는 값이 입력되지 않은 곳은 아예 그 값 자체가 존재하지 않아서 참조하게된다면 컴파일 에러를 발생시킨다.




5. 메모리 관리


C/C++에서는 힙영역에 할당된 메모리는 프로그래머가 free / delete 연산자를 통해 해제시켜줘야 했지만

JAVA는 참조되지 않는 메모리는 Garbage Collector가 알아서 해제시켜준다.




6.


딱히 제목을 정하진 못하겠다만, C/C++과 JAVA의 큰 차이점은 JAVA는 모든 것이 class를 기본으로 돌아간다는 것이다.

C/C++은 소스파일과 헤더파일로 이루어져있다. 헤더파일은 객체를 정의하고, 함수를 선언하며 이렇게 정의되고 선언된 것들은 소스파일에서 그 기능이 명시된다.

JAVA는 모든 것이 class가 기본이며, class안의 함수가 정의되면 그 함수에 접근하기 위해서는 해당 클래스를 통해 접근해야 한다.

C++에서는 만약 code1.cpp에 Add라는 함수를 정의하면, main.cpp에 있는 메인함수에서 Add라는 함수를 실행하기 위해선 단순히 Add라는 함수의 구조만 선언해주면 컴파일 이후 링커에 의해서 자동적으로 연결되서 수행된다.

하지만 JAVA는 main함수 조차 어떤 class안에 종속되어 있으며, 헤더와 소스코드의 구분이 없고 오로지 클래스단위로 이루어져있다. main함수가 종속된 class 외에 선언되어있는 함수는 마치 C++에서 멤버함수에 접근하듯 접근해야 한다.


C++은 C에서 발전된 언어답게 절차지향적인 측면이 남아있다. 어떤 함수가 선언 되야지만 그 다음에 해당 함수를 사용할 수 있는데, 이는 만약 서로 다른 소스파일에 있는 함수를 사용하고자 하면 해당 함수가 있다는 정보를 꼭 컴파일러에게 알려줘야 한다. 

하지만 JAVA는 그렇지 않다. 우선 JAVA의 특성상 다른 클래스에 선언된 함수를 접근하려면 해당 클래스 변수를 만들고(JAVA에선 인스턴스화 시킨다고 한다.) 해당 변수를 통해 접근해야되니 이는 논외로 치더라도,

C와 C++에서처럼 같은 소스파일에서 불러들일 경우 해당 함수를 사용하기 전에 꼭 그 원형을 먼저 정의하던가 아니면 선언만 해두고 나중에 정의하던가 해야하지만 JAVA는 그냥 함수를 사용하고, 나중에 정의해도 컴파일러가 알아서 처리한다.




7. 멤버변수의 초기화


C++의 멤버변수 초기화는 생성자를 통해서만 가능하다.

JAVA는 직접 가능하다.




8. 생성자의 호출 방식


JAVA는 생성자의 인수가 없는 경우 그냥 new Class(); 와 같이 텅 빈 소괄호로 호출하지만,

C++은 텅 빈 소괄호는 함수의 원형 선언에만 허용한다. 따라서 인수가 없는 생성자를 호출하는 경우

new Class; 와 같이 선언해야 한다.

Comments