반응형
자바도 이제 어느 정도 역사를 가진 언어가 된것 같습니다. 지금 와서 자바에 대해 포스팅 한다는 것이 많이 늦은 감이 있지만 그래도 제가 공부했던 언어 중 하나이고 여전히 자바를 사용하는 곳들이 많다고 생각되기 때문에 다시 한번 정리 하는 차원에서 포스트를 시작해 보려 합니다.
먼저 이번 포스트에서는 자바와 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언어 : 파일 단위 이기 때문에 마음에 드는 부분을 가져다 쓸 수 없고 배껴야합니다.
자바 : 클래스(Class) 단위의 객체 지향언어이고, interpreter방식 입니다.
먼저 이번 포스트에서는 자바와 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에서는 실행이 안 됩니다. 라이브러리가 다를 수 있기 때문입니다.
그래서 플랫폼에 종속적입니다. 예를 들면 UNIX에서 만든 abc.exe 는 WINDOWS에서는 실행이 안 됩니다. 라이브러리가 다를 수 있기 때문입니다.
자바 : 클래스(Class) 단위의 객체 지향언어이고, interpreter방식 입니다.
abc.java → 컴파일 → abc.class → interpreter(자바가상머신) → 각 플랫 폼에 맛게 실행 하는 방식으로
바이너리가 아닌 바이트 코드의 클래스 파일을 읽으면서 자기 플랫폼에 맞게 실행됩니다. 즉 플랫폼에 독립적입니다.
바이너리가 아닌 바이트 코드의 클래스 파일을 읽으면서 자기 플랫폼에 맞게 실행됩니다. 즉 플랫폼에 독립적입니다.
반응형
'컴퓨터&IT > 자바 Java' 카테고리의 다른 글
JComboBox 에 KeyListener 추가하기 (0) | 2013.07.02 |
---|---|
Eclipse에서 JavaDoc 생성시 javadoc unmappable character for encoding MS949 에러 (0) | 2012.10.09 |
자바(Java)로 만든 사칙연산 계산기. (4) | 2012.07.07 |
자바(Java) 프로그래밍할 때 데이터 타입의 사소한 실수??와 그에 대한 고민 (0) | 2012.03.18 |
자바의 main() 함수에 대해서 (0) | 2011.10.04 |