도도한 개발자

[Java] #19. 자바의 역사 본문

Backend/Java

[Java] #19. 자바의 역사

Kiara Kim 2022. 4. 2. 20:00

* 자바의 역사

 

자바의 역사는 1991년으로 거슬러 올라간다. 제임스 고슬링(James Gosling), Mike Sheridan, Patrick Naughton 이렇게 3명의 젊은이가 TV와 시정자가 서로 상호 작용 할 수 있는 것을 만들기 위해 시작되었다. 1992년 고슬링의 사무실 앞 참나무를 보고 이름 지은 "Oak"라는 언어다.

 

이후에 1995년 "Oak"라는 언어의 이름이 커피의 한 종류를 뜻하는 "자바 커피"의 이름을 본따 "Java"라고 바뀌면서 자바 기술이 시작하게 되었다. 자바 언어를 만들여 "Write Once, Run Anuwhere"라는 모토가 만들어졌으며, 여러 플랫폼에서 수행할 수 있는 개발 언어를 목표로 개발되었다. 자바의 표준 버전의 이름 JDK, J2SE, Java SE로 변경되어 왔지만, 여기선 자바 표준 버전을 일반적으로 불리는 JDK라고 사용한다.

 

 

* JDK 플랫폼에 따른 차이

 

한 가지 유의해야 할 점은, 자바는 예전의 Sun, 즉 Oracle에서만 만드는 것이 아니라는 것이다. 우리나라에서 많이 사용하는 서버에는 IBM, HP에서 만든 서버와 예전 Sun에서 만든 Solaries가 있다. IBM과 HP는 별도의 운영체제를 갖고 있으며, 그 OS에 최적화되어 있는 JDK를 개발하여 사용하고 있다.

 

어떤 OS에서 개발하든 JDK의 버전만 맞으면 적용할 OS에서 컴파일만 하면 애플리케이션 실행에 문제가 없다.

 

 

* JDK, J2SE, Java SE 외에 자바에서 사용되는 다른 용어들

 

º JDK : Java Development Kit

º J2SE : Java 2 Standard Edition

º JavaSE : Java Standard Edition

 

자바를 개발하기 위해 설치하다 보면, JDK와 JRE로 분이되어 있는 것을 알고 있을 것이다. 여기서 각각의 용어는 다음과 같다.

 

º JDK : Java Development Kit

º JRE : Java Runtime Environment

 

각각 이름에서 알 수 있듯, JRE는 실행만을 위한 환경이다. 따라서 이 JRE만 설치하면 자바를 컴파일하는 등의 각종 프로그램이 제외된 상태로 설치된다. 다음의 그림을 보자.

 

자바 아키텍처

가장 좌측을 보면 JDK와 JRE로 나뉘어져 있는 것을 볼 수 있다. 즉, JRE는 자바를 실행할 수 있는 환경의 집합이라고 보면 된다. 그리고 칸칸이 쌓여 있는 것들은 자바에서 제공하는 라이브러리들이라고 보면 된다.

 

 

* 자바 언어의 특징

 

º It should be "simple, object-oriented and familiar"

º It should be "robust and secure"

º It should be "architecture-neutral ad protable"

º It should excecute with "high performance"

º It should be "interpreted, threaded, and dynamic"

 

한글로 번역해보자..

 

º  자바는 "단순하고, 객체지향이며, 친숙"해야 한다.

º  자바는 "견고하며, 보안상 안전"하다.

º  자바는 "아키텍처에 중립적이어야 하며 포터블"해야 한다.

º  자바는 "높은 성능"을 제공해야 한다.

º  자바는 "인터프리트 언어이며, 쓰레드를 제공하고, 동적인 언어"이다.

 

** 자바는 "단순하고, 객체지향이며, 친숙"해야 한다.

 

자바는 처음 만들 때부터 객체지향으로 디자인되어 있다. 물론 개발하는 사람이 객체지향 프로그램을 작성하지 않으면 이러한 이점은 모두 사라진다. 따라서 자바를 쓴다고 해서 무조건 객체지향적으로 개발된다는 것은 아니다. 그리고 자바로 개발할 땐 처음부터 모든 것을 만들 필요가 없다. 개발하면서 필요한 여러 기능들은 이미 API를 통해 제공하고 있기 때문이다.

 

** 자바는 "견고하며, 보안상 안전"하다.

 

자바는 컴파일할 때와 실행할 때 문법적 오류에 대한 체크를 한다. 메모리 관리 모델이 매우 단순하고, 포인터의 개념이 없어 자바를 매우 믿을 수 있고(reliablie) 견고한 소프트웨어가 될 수 있도록 도와준다.

자바는 기본적으로 분산 환경에서 사용하기 위해 디자인되었는데, 이때 보안이 매우 중요한 부분 중 하나다. 자바 기술은 외부에서 침입이 불가능한 애플리케이션을 만들 수 있도록 해준다. 네트워크 환경에서 클라이언트로 다운로드한 승인받지 않은 프로그램은 실행할 수 없도록 되어있기 때문이다.

 

** 자바는 "아키텍처에 중립적이어야 하며 포터블"해야 한다.

 

자바로 작성한 프로그램은 다양한 하드웨어 아키텍쳐에서 수행할 수 있도록 되어 있다. 따라서 자바는 아키텍처에 중립적인 바이트 코드를 생성한다. 따라서 버전만 동일하다면 동일 프로그램은 어떤 플랫폼에서도 실행할 수 있다.

아키텍처 중립적이라는 말은 포터블한 시스템의 일부분인데, 기본 데이터 타입의 크기를 지정해놓고, 숫자 연산자에 대한 행위들을 정의해 두었다. 하드웨어와 소프트웨어 아키텍처에 따른 데이터 타입의 호환성에 문제가 발생하지 않는다. 이런 호환성과 포터블한 환경을 제공하는 것은 JVM 덕분이다.

 

** 자바는 "높은 성능"을 제공해야 한다.

 

성능은 항상 고려해야 하는 부분이다. 자바는 실행 환경에서 최대한의 성능을 낼 수 있도록 되어있는데, 자동화된 가비지 컬렉터는 낮은 우선 순위의 쓰레드로 동작하기 때문에 보다 높은 성능을 낼 수 있다.

 

** 자바는 "인터프리트 언어이며, 쓰레드를 제공하고, 동적인 언어"이다.

 

자바 인터프리터는 자바 바이트 코드를 어떤 장비에서도 수행할 수 있도록 해준다. 따라서 기존에 사용하던 무거운 컴파일과 링크와 테스트 사이클을 걸쳐야 하는 개발 환경보다 빠른 환경을 구축할 수 있다.

자바는 멀티 쓰레드 환경을 제공하기 때문에, 동시에 여러 작업을 수행할 수 있다. 따라서 사용자에게 매우 빠른 사용 환경을 제공한다.

자바 컴파일러는 컴파일시 매우 엄격한 정적인 점검을 수행하며, 실행 시 동적으로 필요한 프로그램들을 링크시킨다.

 

 

* 자바 학습 시 알아야 하는 용어

 

º JVM : Java Virtual Machine(자바 가상 머신)

º GC : Garbage Collector(가비지 컬렉터)

 

JVM은 작성한 자바 프로그램이 수행되는 프로세스를 의미한다. 즉, java라는 명렁어를 통해 애플리케이션이 수행되면, 이 JVM 위에서 애플리케이션이 동작한다. 이 JVM에서 작성한 프로그램을 찾고 실행하는 일련의 작업이 진행된다.

자바의 메모리 간리는 개발자가 하지 않아도 된다. 메모리 관리는 JVM내의 "가비지 컬렉터"가 알아서 하기 때문이다.

 

 

그럼 이만.