에이다 러브레이스 19세기
1815~1852
현재 존재하는 거의 모든 프로그래밍 언어에 사용되는 개념을 최초로 만들었다.
서브루틴(Subroutine), 점프(Jump), 루프(Loop), 조건문(If then) 등
ENIAC 애니악 1946
2차 세계 대전 당시 만들어지기 시작한 30톤짜리 공학용 계산기
1946년에 완성되었기에 전쟁에 활용되진 않았다.
진공관, 기계식스위치, 메모리용 저항을 사용했다.
EDVAC 애드박 1951
중앙 프로세서, 기억장치, 프로그램, 데이터로 이루어져 있다.
2진수에 의한 표현과 프로그램 내장 방식을 설계의 중심으로 한다.
EDSAC 애드삭 1949
애드박 설계 당시 자문이었던 폰 노이만은 보고서를 제출한다.
그 보고서에 현대 컴퓨터의 근간인 폰 노이만 구조의 개념이 담겨있었다.
폰 노이만 구조는 메모리에 프로그램과 데이터를 한꺼번에 저장해 두고, 필요에 따라 프로그램을 교체해 사용할 수 있도록 설계된 컴퓨터 구조를 설명한다. 영국의 모리스가 이를 기반으로 에드삭을 만든다.
이 시기 탄생한 언어가 어셈블리어이다.
영국의 캐이틀린 부스는 폰 노이만 구조를 바탕으로 최초의 드럼 메모리 장치를 발명하고 어셈블리어를 만든다.
기계어는 0과 1을 구분할 수 있는 이진수로만 이루어져 사람이 이해하기 어렵다.
기계어의 명령들을 일상 용어로 표현하고 이걸 기계가 알 수 있는 기계어로 번역하기 위해 만든 언어이다.
스푸트니크 쇼크 1957
1957년 소련이 최초의 인공위성 스푸트니크 1호를 지구 궤도에 진입시킨다.
미국은 이에 엄청난 충격을 먹는다. 소련이 핵미사일을 쏘면 막을 수 없다는 공포를 느낀 것이다.
그래서 ARPA와 NASA 두 기관을 설립한다.
미국 국방부는 당시 대형 서버를 한 곳에 두고 모든 정보를 취합 관리하고 있었는데 만약 핵폭탄이 떨어질 것을 생각해 서버를 여러 곳에 나누어 두고 연결하자는 의견이 나온다.
그리하여 1969~71년 인터넷의 시초인 ARPAnet 아파넷이 만들어진다.
또한 당시 컴퓨터는 하나의 하드웨어에 한 개의 소프트웨어만 실행시킬 수 있었다. 서버를 설치하고 여러 시스템을 돌리기 위해 멀틱스(Multics) 개발을 시작한다.
이 프로젝트는 실패로 끝나지만 개발에 참여했던 켄 톰슨와 데니스 리치는 이후 최초의 운영체제 유닉스(UNIX)를 만들게 된다.
유닉스(UNIX) 1971
멀틱스 프로젝트가 하드웨어에 여러 소프트웨어를 올리는 거였다면, 유닉스는 하드웨어 위에 운영체제라는 하나의 소프트웨어를 올리고 운영체제 위에 여러 소프트웨어를 실행시키는 것이다.
이 때 사용된 언어가 C언어이다.
C언어 1972
저급 언어 특징을 가지고 있어 어셈블리어 수준으로 하드웨어를 제어할 수 있고, 그렇기에 실행 속도가 매우 빠르다.
대용량 메모리를 다루지 않는 임베디드 시스템에서 많이 사용된다.
* 임베디드 시스템: 기계나 특정 기능을 수행하는 컴퓨터 시스템(냉장고, 스마트티비, 자동차...)
하지만 시스템 자원을 직접 제어하기 위해 신경쓸 부분이 많다. 예를 들어 메모리를 할당했으면 해제도 해줘야한다.
컴퓨터 기술이 발전함에 따라 운영체제는 다양해졌다.
윈도우(1985), 리눅스(1991), 맥OS(2001), iOS(2007), 안드로이드(2008)
C언어는 운영체제에 따라 코드 해석이 다르기에 코드 재사용이 어렵다.
하나의 프로그램을 실행시키기 위해 각 운영체제마다 코드를 짜야하는 것이다.
C언어 이후 다양한 언어들이 나온다.
C++(1980), 에이다(1983), 오브젝트-C(1986), 파이썬(1991), HTML(1991)...
자바 1995
썬 마이크로시스템즈에서 개발한 객체 지향 프로그래밍 언어이다.(2010년에 오라클이 인수)
자바는 운영체제에서 독립적인 언어이다. 어느 운영체제에서든 실행할 수 있다.
그럴 수 있는 이유는 자바 가산 머신 JVM을 사용하기 때문이다.
하드웨어 위에 운영체제를 깔고 여러 소프트웨어를 돌렸듯이
운영체제 위에 JVM을 설치하고 그 위에서 프로그램을 돌리는 것이다.
자바 코드(.java)를 바이트코드(.class)로 컴파일하고 JVM가 운영체제에 맞게 기계어(010101)로 변환한다.
그래서 매우 느리다. 하지만 현재 많은 운영체제를 포괄하기 사용되는 언어이다.
'Dev > Java' 카테고리의 다른 글
[Java] && 와 &는 동일하지 않다. (0) | 2024.07.29 |
---|---|
[Java] 데이터 타입 (0) | 2024.07.28 |
[Java] JVM 구조 (0) | 2024.07.27 |
[Java] 자바 프로그램은 어떻게 실행될까? (0) | 2024.07.27 |
[Spring] Mac os에 Java 11과 IntelliJ 설치 (0) | 2021.06.05 |