기계어는 제어 가능한 복잡한 회로를 거쳐 하드웨어에 명령을 내려 원하는 결과를 출력장치에 도출해낸다.
프로그램이 cpu에 내리는 명령들을 표현하며, 이러한 명령들은 실제로 0과 1로만 이루어져 있다.
우리의 목적은 소프트웨어로 하드웨어를 제어하는 것이다.
기계어는 인간들의 관점에서 보면 이해하기 어렵고 프로그래밍하기에 상당히 불편한 언어이었기 때문에
좀 더 용이한 언어가 필요했다.
따라서 인간이 보다 편리하고 알기 쉽게 지시를 내리기 위하여 프로그래밍 언어들이 만들어졌다.
어셈블리 언어는 사람이 이해하기 편한 기호를 기계어로 번역해준다.
add나 minus와 같은 명령을 기호라고 하면
기호가 많을수록 복잡도가 높아지고
적을수록 복잡도는 낮아지지만 기능은 떨어지게 된다.
명령을 내리는데 필요한 모든 명령어 셋을 갖추고 있는 프로세서를 CISC라고 하고,
모든 명령어들 중 불과 20%에 해당하는 명령어들만이 전체 80% 이상의 일을 처리하여
모든 명령어를 갖고 있는 것은 비효율적일 수 있는 점을 극복하기 위해
나온 프로세서가 RISC이다.
CISC(Complex Instructions Set Computer)는 복잡하고
RISC(Reduced Instruction Set Computer)는 간단하다고 이해하고 넘어가면 된다.
어셈블리 언어는 하드웨어마다 다 다르게 있다.
하드웨어가 쓰는 CISC, RISC가 다 다르기 때문이다.
그렇기 때문에 하나의 게임을 개발할 때도 여러 가지 버전의 게임을 개발해야 한다.
따라서 어셈블리 언어는 하드웨어에 종속되어 있다.
어딘가에 의존적이면 속도는 빠르지만 확장성은 떨어진다.
어셈블리 언어는 저수준 언어라서 최적화가 가능하다.
C언어는 고수준 언어이다.
사람이 이해해서 소통할 수 있는 언어가 고수준 언어이다.
고수준언어는 OS가 필요하다.
OS는 내가 어떤 cpu를 가지고 있는지 알기 때문에 cpu에 맞게 저수준 언어로 번역해준다.
내가 어떤 하드웨어를 사용하는지 고수준 언어는 몰라도 된다.
그래서 C언어는 OS가 이해하는 언어이다.
OS 없이는 고수준언어가 돌아가지 않는다는 점에서 OS에 의존적이라고 볼 수 있다.
하지만 OS도 Linux, Window 등등 종류가 다양해서
C언어 또한 여러 가지 버전으로 개발해야 한다.
자바(JAVA)는 가상 머신이 이해하는 하이브리드 언어이다.
자바는 가상 머신(Virtual Machine, VM)을 가지고 있다.
자바가 사용하는 가상 머신이라고 해서 JVM이라고 한다.
JVM은 어떠한 기계어로도 쉽게 변환해준다.
JVM은 많은 운영 체제에서 지원되기 때문에 동일한 코드 파일이 윈도우, 솔라리스, 리눅스 등에 변경 없이 실행될 수 있다.
자바에 대해서는 왜 하이브리드 언어인지 앞으로 더 자세하게 알아가 보자.
사람이 OS와 상호작용하며 소통할 수 있는 언어를 shell 언어라고 한다.
shell 언어는 명령 프롬프트에서 명령해준다.
명령 프롬프트 또는 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을
CLI(Command Line Interface)라고 한다.
이것과 다르게 사용자가 편리하게 사용할 수 있도록 아이콘 따위의 그래픽으로
기능을 알기 쉽게 나타낸 것을 GUI(Graphical User Interface)라고 한다.
CLI는 한 줄씩 입력하여 OS에게 명령하여 OS가 적용시키는 것이다.
기계어에서 하이브리드 언어로 발전하면서
종속되는 곳이 없기 때문에 개발 속도는 빨라지고,
거치면서 번역하는 곳이 늘어나기 때문에 진행속도는 느려진다.
하이브리드 언어란 무엇일까?
자바는 인간이 이해할 수 있는 언어이다.
.java 파일을 JVM이 이해할 수 있도록 번역하는 것을 컴파일이라고 한다.
컴파일하면 인간이 이해할 수 없는 코드인 .class 파일이 생성된다.
이 .class 파일을 한 줄씩 읽어서 shell로 다시 번역하는 것을 인터프리터라고 한다.
인터프리터 후 OS에게 실행시켜주는 것까지의 기능을 한다.
이렇게 컴파일과 인터프리터 두 번의 번역 과정이 있는 언어를 하이브리드 언어라고 한다.
컴파일과 인터프리터의 번역 차이는 다음 시간에 자세히 알아보자.
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9