반응형
자바도 이제 어느 정도 역사를 가진 언어가 된것 같습니다. 지금 와서 자바에 대해 포스팅 한다는 것이 많이 늦은 감이 있지만 그래도 제가 공부했던 언어 중 하나이고 여전히 자바를 사용하는 곳들이 많다고 생각되기 때문에 다시 한번 정리 하는 차원에서 포스트를 시작해 보려 합니다.

먼저 이번 포스트에서는 자바와 C언어를 비교해 보겠습니다!!

 자바와 C 언어는 어떤 차이가 있을까요? 


■ 1. 메모리를 접근하는 방식에 차이가 있습니다.


   C 언어 : pointer를 이용해서 메모리에 접근합니다. 하지만 이 pointer를 사용해서 부트영역을 건드린다면 치명적인 오류가 발생합니다.

   자바 : reference를 사용합니다.
  
C언어는 100번지에 직접 물건을 전달하려 하는데 실수로 101번지에 배달하면 오류가 발생하지만 Java는 우체국을 통해 보내서 주소가 다를 경우 수취인 불명으로 반송되는 정도로 생각하면 좋을 것 같습니다.


■ 2.

   C 언어 : 관련된 데이터를 하나로 모으기 위해 구조체(Structure)공용체(Union)를 사용합니다.

   자바 : 클래스(Class) 개념을 사용합니다.


■ 3. 구성 단위

   C언어 : acb.c 형태의 소스파일, abc.h 형태의 헤더파일 등 파일 단위로 되어 있어 #include를 사용해 문서에 포함합니다.

   자바 : 클래스(Class) 단위로 되어 있어 import를 사용해 포함 시킵니다.


■ 4. 타입(type) 정의

   C언어 : 구조체 등을 사용해 새로운 타입의 정의가 가능합니다.

   자바 : 타입을 정의할 수 없습니다.

■ 5. goto

   C언어 : goto 를 사용합니다.

   자바 : goto라는 예약어는 있지만 사용하지 않습니다.

goto를 사용하면 로직이 복잡해진다고 하네요.


■ 6. 형변환 (casting 캐스팅)

   C언어 : 자동 형변환을 합니다.

   자바 : 자동으로 형변환을 하지 않고 오류를 발생시킵니다.

C언어의 경우 int a = 3.14 라고 정의할 경우 a를 자동으로 3으로 캐스팅합니다. 만약에 이것이 314를 3.14로 잘 못 쓴 것이라면 오류를 찾아내기가 어렵습니다. 자바에서는 이런 사용자의 실수를 방지하기위해 형검사를 엄격하게 한다고 합니다.


■ 7. 상속 (Inheritance)

   C++ : 다중 상속이 가능합니다.

   자바 : 단일 상속만 가능합니다.

다중 상속이 가능할 경우 상속한 각각의 부모에 같은 변수 명이 있는 경우 그 변수가 어디서 온 것 인지 알기 어렵다고 합니다.


■ 8.

   C언어 : 파일 단위 이기 때문에 마음에 드는 부분을 가져다 쓸 수 없고 배껴야합니다.
abc.c → 컴파일(Compile) → abc.obj → 빌드(Build) → abc.exe 과정을 거쳐 최종적으로 바이너리 파일이 됩니다.
그래서 플랫폼에 종속적입니다.  예를 들면 UNIX에서 만든 abc.exe 는 WINDOWS에서는 실행이 안 됩니다. 라이브러리가 다를 수 있기 때문입니다.

   자바 : 클래스(Class) 단위의 객체 지향언어이고, interpreter방식 입니다.
abc.java → 컴파일 → abc.class → interpreter(자바가상머신) → 각 플랫 폼에 맛게 실행 하는 방식으로
바이너리가 아닌 바이트 코드의 클래스 파일을 읽으면서 자기 플랫폼에 맞게 실행됩니다. 즉 플랫폼에 독립적입니다.
반응형

+ Recent posts