자바의 탄생

1990년, 썬 마이크로시스템즈 사의 직원들은 사용하기 어려운 회사 자체의 C/C++ API에 점점 지쳐가고 있었습니다. 엔지니어인 패트릭 노튼(Patrick Naughton)은 이에 불만을 품고 NeXT로 이직을 고려하던 중에 새로운 기술을 연구해보지 않겠냐는 제안을 받았고, 이 제안에 따라서 스텔스 프로젝트가 탄생했습니다. 이 프로젝트는 곧 제임스 고슬링과 마이크 셰리든이 합류하면서 그린 프로젝트로 이름이 바뀌었고, 팀이 만들어지면서 차세대 스마트 가전제품 개발을 위해 신기술 개발에 착수하게 되었죠.

이 팀은 처음엔 C++를 사용하려고 했지만 얼마 지나지 않아서 복잡한 메모리 관리 기능이나 다양한 기능의 부재, 다양한 플랫폼에 이식하기 쉬운 언어의 필요성 등 여러 가지 문제들에 당면하고 새로운 언어 개발에 착수하게 됩니다. 첫 번째로는 C와 Mesa 두 언어를 결합하여 새로운 언어를 만들려고 했고, 제임스 고슬링은 기존의 C++를 확장한 언어인 C + + ++ -를 만드려 했지만 오크(Oak)라고 불리는 새로운 언어 개발에 착수하기 위해 이를 포기했습니다.

이 오크라는 언어는 처음에 가전제품에 사용될 목적이었으나 여러 종류의 운영체제를 사용하는 컴퓨터들이 통신하는 인터넷의 등장으로 플랫폼에 독립적인 오크가 이에 적합하다고 판단하여, 인터넷 환경에 적합하도록 오크를 새롭게 설계한 후 1995년에 자바(JAVA)라는 이름으로 발표를 하게 됩니다.

자바의 특징

자바의 주요 특징을 몇 가지 살펴보자면 다음과 같습니다.

  • 첫째, 자바는 객체 지향 언어입니다. 여기서 객체 지향 언어란 데이터나 정보의 표현에 중심을 둔 언어, 반대로 절차 지향 언어란 프로세스 흐름에 중점을 둔 언어를 말합니다. 자바는 거의 대부분 객체로 되어있습니다.
  • 둘째, 자바는 단순합니다. 자바에서는 다른 언어에서 논쟁의 여지가 있거나 복잡하고 지저분한 기능이 제외됐습니다. 예를 들어서, 자바는 연산자 오버로딩을 허용하지 않습니다. (만약 개발자가 연산자 오버로딩을 할 수 있도록 허용한다면 같은 연산자가 여러 의미를 가질 수 있으므로 혼란스러워질 우려가 있습니다.)
  • 셋째, 자바는 이식성이 높습니다. 예를 들면, C나 C++ 같은 경우에는 플랫폼에 종속적입니다. 즉 다른 운영체제나 CPU에서 약간씩 코드가 달라집니다. 그런데 자바는 플랫폼에 독립적이어서 한번 작성하면 JVM이 설치된 모든 종류의 컴퓨터에서 프로그램을 실행할 수 있습니다.
  • 넷째, 자바는 메모리 영역을 알아서 관리하므로 개발자는 메모리 관리 대신 다른 곳에 더 집중할 수 있습니다.

이 밖에도 멀티스레드, 동적 로딩, 엄격한 타입 검사 등 많은 특징들이 있지만 나머지 특징들은 뒤로 진행하면서 차차 알아가도록 합시다.

JVM, JRE, JDK

JVM(Java Virtual Machine)

가상 머신(Virtual Machine)에서 짐작할 수 있듯이 JVM은 물리적인 실제 기계 장치가 아닌 추상적인 장치로, JVM을 따로 다운로드 하여 설치할 수는 없습니다.

자바는 운영체제에 의존적이지 않기 때문에 운영체제가 달라도 자바 프로그램을 실행할 수 있습니다. 우리가 자바 프로그램을 실행할 때, 자바 컴파일러는 우리가 작성한 자바 코드를 바이트 코드(.class 파일)로 컴파일하고 JVM은 자바 바이트 코드를 운영체제에 특화된 코드로 변환하는 역할을 합니다. 우리는 JVM 덕분에 모든 플랫폼/운영체제에서 동일한 클래스 파일을 실행할 수 있습니다.

자바는 플랫폼에 독립적이지만 JVM은 플랫폼에 종속적입니다. 아래 그림과 같이 JVM이 운영체제와 프로그램 사이에서 중계하면서, 운영체제에 특화된 코드로 변환해야 하므로 운영체제마다 다른 JVM이 제공됩니다.

JVM의 구조나 동작 원리에 대해 관심이 있으시면 이곳을 참고하세요. 이곳에선 내용이 길어지기 때문에 따로 설명하진 않겠습니다.

JRE(Java Runtime Environment)

JRE은 사용자의 컴퓨터에 자바 프로그램을 실행할 수 있는 환경을 제공하는 설치 패키지입니다. 자바 프로그램을 실행하기 위해서는 JRE를 설치해야 하지만, 개발 도구는 들어있지 않으므로 자바로 프로그래밍을 할 때는 JDK를 설치해야 합니다.

JDK(Java Development Kit)

JDK는 자바 프로그램을 개발하고 실행할 수 있는 환경을 제공하는 도구입니다. JDK에는 JRE을 포함하여 컴파일러, 디버거, 자바독, 키툴 등과 같은 개발 도구가 들어가 있습니다.

JDK 설치하기

여기에서는 Oracle JDK와 Open JDK의 차이에 대해 알아보고 각 JDK의 설치 과정을 살펴봅니다. 학습용으론 둘 다 무료이니 둘 중 원하는 JDK를 택하여 설치하시기 바랍니다.

Oracle JDK와 Open JDK의 차이

Oracle JDK와 OpenJDK의 가장 큰 차이점은 바로 라이선스에 있습니다. 우선 OpenJDK는 GPL(General Public License) v2를 따르며, 6개월마다 새로운 버전을 배포합니다.

GPL(General Public License)
자유 소프트웨어 재단(Free Software Foundation)에서 만든 오픈소스 라이선스입니다. 이 라이선스의 주요 특징을 살펴보면 다음과 같습니다. 아래와 같은 내용은 소프트웨어를 외부로 판매 혹은 배포할 때만 적용되며, 배포하지 않고 개인적인 목적으로 사용하고 있다면 소스 코드를 공개하지 않아도 됩니다.

① GPL 라이선스 프로그램을 어떠한 목적으로든지 사용할 수 있다. 다만 법으로 제한하는 행위는 할 수 없다.
② GPL 라이선스 프로그램의 실행 복사본은 언제나 프로그램의 소스 코드와 함께 판매하거나 소스 코드를 무료로 배포해야 한다.
③ GPL 라이선스 프로그램의 소스 코드를 용도에 따라 변경할 수 있다.
④ 변경된 컴퓨터 프로그램 역시 프로그램의 소스 코드를 반드시 공개 배포해야 한다.
⑤ 변경된 컴퓨터 프로그램 역시 반드시 똑같은 라이선스인 GPL 라이선스를 적용해야 한다.

Oracle JDK은 BCL(Binary Code License)를 따랐지만, 2018년 9월에 출시한 Oracle JDK 11 바이너리부터는 BCL가 아닌 OTNL(Oracle Technology Network License)가 적용됩니다. 그리고 안정성을 중시하는 기업을 대상으로 하므로 자주 업데이트를 할 수 없기 때문에 OpenJDK와는 달리 3년간 사용할 수 있는 장기 지원(LTS)을 제공합니다.

BCL(Binary Code License)
BCL은 무료 사용 범위를 한정해 배포한 모델로, 서버 컴퓨터, PC, 태블릿, 스마트폰 등 일반적인 컴퓨팅 목적(General Purpose Computing)으로 사용 시에는 무료입니다. 반대로 임베디드 시스템 등처럼 특정 기능만을 위해 작동하는 시스템이나 솔루션과 같이 일반적이지 않은 컴퓨팅 목적으론 별도의 라이선스비를 지불해야 합니다.

만약 일반적인 컴퓨팅 목적으로 사용했다고 하더라도 라이선스비를 지불해야 할 수도 있습니다. Oracle JDK에는 상업용 기능도 포함되어 있는데, 이 부분에 대해서 오라클 BCL 계약에는 '귀하는 내부 비즈니스 운영에서 프로그램, 자바 애플릿 및 애플리케이션을 실행하거나 상업 및 생산 목적으로 상업용 기능을 사용할 수 없습니다.(You may not use the Commercial Features for running programs, Java applets or applications in your internal business operations or for any commercial or production purpose.)'라고 명시되어 있습니다.

간단하게 상업용 기능을 사용하려면 상용 라이센스를 취득하면 되는거 아니냐라고 생각할 수 있는데, 상업용 기능이 위에서 말했듯이 Oracle JDK에 모두 포함되어 있기 때문에 실수로 상업용 기능을 사용하게 된다면 오라클의 라이선스 감사 대상이 될 수 있습니다.

두 JDK의 차이를 간단히 정리하면 다음과 같습니다.

OpenJDK 설치하기

OpenJDK를 다운로드 하기 위해서 먼저 이곳을 눌러 다운로드 페이지로 이동합니다. 2022년 1월 2일을 기준으로 최신 릴리스는 JDK 17 입니다.

아래와 같은 화면에서 자신의 운영체제에 따라 설치 파일을 다운로드 해주세요. 여기서는 윈도우를 기준으로 설치 과정을 살펴보도록 하겠습니다.

OpenJDK를 설치할 적절한 경로에 방금 받은 압축 파일을 해제합니다. 여기서는 임의로 'C:\Program Files\Java\jdk-17.0.1' 경로에 폴더를 만들고 이곳에 다운로드 받은 openjdk-17.0.1_windows-x64_bin.zip 파일의 압축을 해제하도록 하겠습니다. 이제 환경 변수를 지정하는 일만 남았습니다.

Oracle JDK 설치하기

Oracle JDK를 다운로드 하기 위해서 먼저 이곳을 눌러 오라클 웹사이트로 이동합니다. 2022년 1월 2일을 기준으로 최신버전은 Java SE Development Kit 17.0.1 입니다. 아래와 같은 화면에서 자신의 운영체제에 따라 설치 파일을 다운로드 해주세요. 여기서는 윈도우를 기준으로 설치 과정을 살펴보도록 하겠습니다.

Java SE Development Kit 다운로드

다운로드 받은 설치 파일을 실행합니다. 그리고 아래의 화면에서 'Next >'를 누릅니다.

JDK 설치 경로를 지정하는 단계입니다. Next를 눌러 다음 단계로 진행합니다.

설치가 진행 중인 모습입니다.

아래와 같은 설치 완료 화면이 나오면 Close를 눌러서 프로그램을 마칩니다.

설치 경로를 따로 지정한 것이 아니라면 기본적으로 'C:\Program Files\Java\jdk-17.0.1' 경로에 JDK가 설치되었을 것입니다. 이제 환경 변수를 설정하도록 하겠습니다.

환경 변수 설정

우선 윈도우 키 + S를 누르고 검색을 열어 아래와 같이 '환경'을 입력 후 '시스템 환경 변수 편집'을 클릭합니다.

그리고 아래와 같이 시스템 속성 창이 나타나면 '환경 변수' 버튼을 클릭합니다.

그런 뒤에 시스템 변수에서 '새로 만들기' 버튼을 클릭합니다.

변수 이름에는 JAVA_HOME을 입력하고, 변수 값에는 JDK가 설치된 경로를 입력한 뒤 확인 버튼을 누릅니다.

그 후 시스템 변수를 보다보면 Path를 찾아볼 수 있는데, 이 Path를 클릭하고 편집 버튼을 누릅니다.

그리고 '새로 만들기' 버튼을 누른 뒤 %JAVA_HOME%\bin을 입력하시고 확인 버튼을 누르시면 됩니다.

이제 제대로 설정되었는지 확인하기 위해서 윈도우 키 + R을 누른 뒤 cmd를 입력하고 아래와 같이 명령 프롬프트 창을 엽니다. 그리고 java를 입력한 후 아래와 같이 제대로 표시되는지 확인합니다.

정상적으로 출력되시나요? 그렇다면 설치에 성공한 것입니다. 만약에 자바 버전을 확인하고 싶으시면 java -version를 입력하여 아래와 같이 확인이 가능합니다.

다음부터는 본격적으로 자바의 세계로 한 걸음 나아가보도록 하겠습니다. 여기까지 읽어주셔서 오늘도 감사합니다. 수고하셨습니다.

'프로그래밍 관련 > 자바' 카테고리의 다른 글

6편. 연산자 (1)  (19) 2012.07.25
5편. 주석  (14) 2012.07.22
4편. 변수와 타입  (24) 2012.07.22
2편. 개발 환경 구축하기  (19) 2012.07.20
3편. 프로그램의 구성  (109) 2012.07.20