컴퓨터의 배선을 직접 조작해야하는 하드웨어 프로그래밍
최초의 컴퓨터를 에니악(ENIAC)으로 알고 있는 분들이 많습니다.
하지만 정말 최초의 컴퓨터는 콜로서스인데요. 당시 콜로서스가 극비의 임무를 맡고 있었기 때문에 대중에게 공개가 늦게되었다고 하네요.
두 컴퓨터는 사실 컴퓨터라기보다는 계산기에 더 가까웠습니다. 주 기능이 연산이었기 때문이죠.
또 이때는 지금처럼 연산기호나 프로그래밍 언어를 사용하여 코딩을 할 수 없었습니다.
컴퓨터의 배선을 직접 조작하는 '하드웨어 프로그래밍'을 해야만했습니다.
소프트웨어 프로그래밍의 탄생
하지만 폰 노이만 아저씨가 새로운 구조를 만들어줍니다. '내부기억장치'를 탑재해서 프로그램을 저장하고 중앙처리장치가 이 프로그램을 읽어서 구동시키게 하는 '소프트웨어 프로그래밍'의 시대를 열었죠.
엄청난 편의성 덕에, 현재 거의 모든 컴퓨터들이 폰 노이만 구조를 따르고 있습니다.
초기에는 0과 1로 이루어진 '기계어'를 사용하여 CPU가 이해할 수 있게 2진법의 코드로 작성을 하였습니다.
하지만 기계어 역시 프로그래밍의 난이도가 쉽지 않았습니다.
어셈블리어의 탄생과 고급어까지
'기계어'는 컴퓨터의 관점에서 바로 읽을 수 있지만 인간들의 관점에서는 사용하기가 불편했습니다.
따라서 탄생한게 '어셈블리어'입니다. '어셈블리어'란 기계어의 한 단계 위에 있는 언어이며 기계어와 단 둘 뿐인 '저급언어'(저급이라고 해서 질이 낮다는 것을 의미하는게 아닌 보다 컴퓨터에 가깝다는 의미)입니다.
하지만 '어셈블리어'에도 치명적인 단점이 있었습니다. 바로 통일된 규격이 없어 CPU 아키텍쳐가 바뀐다면 새로운 어셈블리어를 사용해야 했기 때문에 고급 언어인 C,C++,Python등이 탄생하였습니다.
프로그램을 번역해야하는 이유
프로그램을 번역해야하는 이유 즉 우리가 소스코드를 입력하면 번역과정을 거쳐야 하는 이유를 프로그래밍 언어의 역사를 간략히 살펴보면서 찾게되었습니다. 바로 현대사회에서 저희가 쓰고 있는 고급 언어는 컴퓨터의 관점에서는 알아들을 수가 없기 때문에 컴퓨터가 알아들을 수 있는 기계어로 번역과정이 필요하단 거죠!
그렇다면 누가 프로그램을 번역해주는가?
의문이 듭니다. 단지 소스코드를 짜고 실행을 누를 뿐인데 컴퓨터는 알아듣고 출력물을 보여줍니다. 뭔가 숨겨진 게 있을 것 같습니다. 누가 프로그램을 번역해주는 걸까요? 번역을 하는 방식에는 크게 2가지가 있습니다. 컴파일러(Compiler)와 인터프리터(Interpreter)입니다.
먼저 컴파일 언어의 대표적인 언어로는 C,C++,JAVA등이 있습니다. 컴파일 언어들은 코드 전체를 번역 단위로 삼기 때문에 초기 스캔 속도는 오래걸리지만 전체 실행 시간을 따지고 보면 인터프리터 언어보다 빠릅니다. 왜냐하면 컴파일러는 초기 스캔을 마치면 실행파일을 만들어 놓고 다음에 실행할때 이전에 만들어 놓았던 실행파일을 실행하기 때문입니다. 이외에도 컴파일 과정에서 Object file들을 만들고 링커를 이용해 링킹 과정을 거치기 때문에 차지하는 메모리의 양이 커집니다. 컴파일 언어의 오류 출력은 코드 전체를 번역한 뒤 실행하기 전에 이뤄지게 됩니다.
인터프리터 언어의 대표적인 언어로는 Ruby,Python 등이 있습니다. 인터프리터 언어들은 코드 한 줄을 번역 단위로 삼기 때문에 속도가 느린 편입니다. 하지만 컴파일 언어처럼 Object file을 만들고 링킹 과정을 거치지 않기 때문에 메모리 효율면에서 뛰어납니다. 인터프리터 언어의 오류 출력은 코드 번역 단위가 코드 한 줄이기 때문에 프로그램을 실행시키고 한 문장씩 번역될 때 오류를 만나면 바로 프로그램을 중단시키게 됩니다.
'기타' 카테고리의 다른 글
[JS] 콜백함수 설명(사용법이 아닌, definition 탐구) (0) | 2024.03.17 |
---|---|
'ssh' is not recognized as an internal or external command, operable program or batch file. 해결법 (0) | 2024.03.05 |
프로그램 메모리 세그먼트 (0) | 2022.09.17 |
컴파일(Compile)과 런타임(Runtime) (0) | 2022.09.16 |