여러분은 컴퓨터가 무엇이라고 생각하시나요?
이번 클래스는 위의 질문으로 시작되었다.
이는 라이브 섹션에서도 강사님이 하셨던 질문으로
이미테이션 게임을 재밌게 봤던 나는
엘런 튜링이 만든 에니그마 암호 해독 장치가 최초의 컴퓨터라고 불린다는 것을
이미 알고 있었다.
그래서 나는 '명령어 처리 장치' 라고 생각했다.
명령어를 작성한 리스트를 나는 프로그램이라고 생각했고,
이는 편성표를 의미하는 프로그램과도 어느정도 일맥상통한다.
여튼 컴퓨터는 크게 SW와 HW로 나눌 수 있고,
SW는 프로그램, HW는 CPU, RAM, SSD 등 이다.
HW의 CPU 근처에 캐시 메모리가 존재하는데,
공간, 시간 지역성을 갖는다.
공간 지역성은 최근에 참조한 데이터에 인접한 데이터는 사용될 확률이 높다는 의미
시간 지역성은 최근에 참조한 데이터는 다시 사용될 확률이 높다는 의미
이 두가지 지역성을 참고하여 프로그램을 짜면 시간효율을 높힐 수 있다.프로그래밍 언어에서 우리가 배울 java는 고급언어에 속한다. 고급 언어는 사람이 읽고 이해하기 용이한 언어로 이를 컴퓨터가 사용하는 언어(어셈블리어 등)으로 바꾸기 위해 컴파일러를 사용한다.
고급 언어는 수천가지가 존재한다.
이 중 대표적으로 많이 사용하는 언어가 java, javascript, python, c#, c++등 이 있다.
고급 언어는 보통 두가지 종류로 나눌 수 있다.
인터프리터 언어와 컴파일 언어
컴파일 언어는 코드를 한꺼번에 번역한 후
한번에 실행하는 언어로 번역과 실행이 따로 이루어 지며,
인터프리터 언어 보다 빠르지만, 메모리를 많이 차지한다.
ex) C, C++, C#, Go,...인터프리터 언어는 코드를 한 줄 씩 읽어가며 명령을 처리하는 언어로
컴파일 언어보다 느리지만, 수정이 용이하다.
ex) Python, javascript,...java의 경우 컴파일러와 인터프리터가 둘다 존재한다.
자바 컴파일러의 경우 자바 가상 머신이 실행시킬 수 있는
자바 바이트 코드로 번역하고,(.java -> .class)
자바 바이트 코드는 자바 인터프리터를 이용해 한줄 씩 실행한다고 한다.