0과 1로만 이루어진 컴퓨터가 이해할 수 있는 언어를 기계어라고 한다. 사람의 입장에서는 너무 복잡하고 어렵기에 기계 명령어와 일상 용어를 일대일로 매칭하는 기계어와 니모닉의 매칭 코드표를 만들었다. 그 매칭 코드표를 어셈블리라고 부른다.
니모닉: 비유법, 다른 유사한 것에 빗대어 잘 모르는 것을 설명하고자 하는 방법.
어셈블리어 명령어 총정리: Assembly 총정리
어셈블리어로 개발할 때는 같은 작업을 수행하는 소스파일을 각 기계의 종류만큼 만들어야 했지만 C언어의 등장으로 이제는 소스파일을 단 하나만 만들어도 되는 시대가 되었다.
C언어 전에 A언어, B언어 등 여러 언어가 있었는데 다 도태되고 C언어만 살아남았다고 한다.
C언어는 하나의 소스파일을 각 기계어에 맞는 컴파일러로 컴파일 하여 기계어 목적파일을 만들기 때문에 개발자는 소스파일이 동작하는 기계에 상관없이 개발이 가능하다.
컴파일: 사람이 이해하는 언어(고급언어)를 컴퓨터가 이해할 수 있는 언어(기계어)로 바꿔주는 과정. 또는, 우리가 작성한 원시코드를 컴퓨터가 이해할 수 잇는 목적코드로 번역하는 과정.
객체지향 언어의 중심에는 클래스(Class)가 있다.
C++는 C에 객체지향 개념을 도입하긴 했지만 클래스 없이도 개발이 가능하기에 객체지향지원 언어라고 부르기도 한다. (자바는 클래스 없으면 안됨)
Java는 단 하나의 소스 파일로 모든 기종의 컴퓨터에서 실행이 가능하다.
(Write Once Use Anywhere)
C언어는 하나의 소스 파일로 각 기계에 맞는 목적파일로 만들어 어디든 가능하다.
(One Source Multi Object Use Anywhere)
즉, 자바는 하나의 목적파일로도 어디든 실행이 가능하고 C언어는 다수의 목적 파일로 각 기계에 맞게 사용한다.
여기서 자바의 목적파일은 반기계어인 바이트코드(.class)인데 이는 운영체제가 아니라 JVM에서 사용된다.
자바 컴파일러(javac): 소스코드를 바이트 코드로 컴파일 해주는 것
Java의 호환성:
Java의 실행 과정: