자바의 역사
1991년 제임스 고슬링(James Gosling)을 비롯한 썬 마이크로시스템 사의 Green 프로젝트 팀에서 가정용 전자 제품에 사용할 수 있는 작은 컴퓨터 언어를 설계했다.
처음에는 C++를 사용해서 운영체제를 만들려고 시도하였는데 C++의 복잡도로 이해서 실패했다. 그래서 Green 프로젝트를 위한 더 나은 언어를
직접 만들게 되는데 이것이 바로 자바(Java)이다.
이후에 Green 프로젝트는 Time Warner의 주문형 비디오 시스템을 개발하다가 Time Warner가 경쟁사인 실리콘 그래픽스 사를 선택하는
바람에 결국 실패하게 된다.
그러던 1993년, 그래픽 기반의 월드 와이드 웹(World Wide Web)이 발표되고 자바 개발자들은 곧 이러한 웹 기반의 응용 프로그램에는 자바와 같은 기계 중립적인 언어가 이상적이라는 것을 발견한다. 이후 자바 팀은 자바와 월드 와이드 웹과의 연동을 고려하게되고, 자바는 폭발적인 인기를 끌게 되었다.
자바의 특징
단순(Simple)
- 자바는 C++에서 출발 했지만 꼭 필요로 하는 기능만 포함하고 복잡하고 많이 쓰이지 않는 기능을 삭제했다.
- 포인터 연산, 연산자 오버로딩, 다중 상속 등의 복잡한 기능을 삭제했다.
- 자동 메모리 관리 기능, 멀티 스레드, 방대한 라이브러리를 제공했다.
객체 지향(Object-Orineted)
- 객체 지향은 객체별로 코드를 작성하고 객체들을 조합하여 전체 프로그램을 완성하는 프로그램 설계 방법론이다.
- 객체 지향 기법을 사용하면 작성된 코드를 재사용하기가 쉬워서, 보다 빠르게 신뢰성 있는 프로그램을 만들 수 있다.
- 자바에서는 기본 자료형(Data type)을 제외한 거의 모든 것이 객체로 표현된다.
분산처리 지원(Distributed)
: 자바는 네트워크상에서 동작되는 것을 기본적으로 설계된 언어로 TCP/IP, HTTP, FTP같은 프로토콜을 처리할 수 있는 라이브러리를 가지고 있다. 따라서 다른 언어보다 쉽게 네트워크 관련 프로그램을 개발할 수 있으며 프로그래머는 로컬 파일 시스템에서 파일에 접근하는 것과 마찬가지로
네트워크에서 URL을 이용하여 네트워크의 자원에 접근하여 사용 가능하다.
견고(Robust)
: 자바 컴파일러는 실행 시에 문제를 일으키는 많은 오류들을 잡아낸다. 또한 포인터 오류로 인한 메모리 누수 문제도 자바에서는 발생되지 않는다.
안전(Secure)
: 자바는 바이러스, 파일의 삭제나 수정, 데이터 파괴 작업이나 컴퓨터 오류 연산등을 방지하면서 실행되도록 설계되었다.
그리고 자바는 네트워크 환경에서 운영되는 언어이므로 다른 언어보다 안전성이 요구되는데, 자바는 처음부터 다음과 같은 작업들이
불가능 하게끔 설계되었다.
- 실행 스택을 벗어난 접근
- 자신의 프로세스 밖의 메모리 공간 접근
- 파일을 허락없이 읽거나 쓰는 것
컴퓨터 구조에 중립적(Architecture-neutral)
: 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트 코드(Byte code)라는 특수한 이진 파일로 변환한다. 바이트 코드를 실행하기 위해
JVM(Java Virtual Machine)이라는 특수한 가상 컴퓨터 S/W가 필요한데, 이것이 바이트 코드를 한 줄씩 읽어서 해석한 후 실행한다.
따라서 자바로 개발된 프로그램은 CPU나 운영 체제의 종류에 상관없이 JVM을 설치 가능한 시스템에서는 어디서나 실행이 가능하다.
이식 가능(Potable)
: C나 C++와 달리 자바는 구현에 따라 달라지는 언어 스펙이 없다. 예로 자바에서는 int형은 항상 32비트다. C, C++에서는 int형이
16비트도 될 수 있고 32비트일수도 있다. 이것은 프로그램을 다른 컴퓨터 기종으로 이식하는 경우에 많은 문제를 야기할 수 있다.
또 이진 데이터들은 고정된 형식으로 저장되고 전송된다. 따라서 Big-Endian 이나 Little-Endian과 같은 바이트 순서(Byte ordering)문제가
발생하지 않는다. 문자열은 항상 유니코드 형식으로 저장된다.
멀티 스레드 지원(Multithreaded)
: 자바는 프로그래밍 언어안에서 멀티스레딩(Multithreading)을 지원한다. 따라서 다른 언어와 달리 아주 쉽게 멀티스레딩 프로그램 작성이
가능하다.
* 멀티스레딩(Multithreading)이란?
: 여러 가지 작업을 동시에 실행하는 것을 의미한다.
동적(Dynamic)
: 자바는 동적으로 변화되는 환경에 적응하도록 설계되었는데, 라이브러리들은 실행 파일에 영향을 끼치지 않고 자유롭게
새로운 기능들을 추가할 수 있다. 그리고 자바는 실행되기 직전에 라이브러리를 동적으로 링크하므로 실행할 때 변경된 라이브러리가
자동적으로 참조된다.
자바 가상 기계(JVM)
Write Once, Run Everywhere
자바의 가장 큰 장점이다.
프로그램을 완성하고 나면 하드웨어나 운영 체제의 종류에 관계없이 동일한 모습으로 실행이 가능하다.
다른 프로그래밍 언어는 소스 코드가 컴파일러에 의하여 특정한 컴퓨터의 기계어로 변환되어서 특정 컴퓨터에서 실행된다.
하지만 자바 컴파일러는 특정한 컴퓨터를 위한 코드를 바로 생성하지 않고 가상적인 컴퓨터의 기계어인 바이트 코드를 생성한다.
이 바이트 코드는 자바 가상 기계라고 하는 소프트웨어에 의해 한 줄씩 해석되면서 특정한 컴퓨터에서 실행된다.
자바 실행 과정
자바 플랫폼(Platform)
* 플랫폼이란?
: 프로그램이 실행되는 하드웨어와 소프트웨어 환경이다.
자바 플랫폼은 두 가지의 요소로 이루어져 있다. 플랫폼만 같으면 바이트 코드를 변경 없이 실행이 가능하다.
- 자바 가상 기계
- 자바 응용 프로그래밍 인터페이스(API : Application Programming Interface)
자바 에디션(Edition)
자바는 개발 분야에 따라서 Java SE, Java EE, Java ME, Java FX 등으로 나뉜다.
Java SE(Standard Edition)
: 자바 언어의 핵심 기능을 제공한다. 데스크탑과 서버에서 자바 애플리케이션을 개발하고 실행할 수 있게
해주며 임베디드 환경(Embedded environment)과 실시간 환경(Real-time environment)도 지원한다.
Java EE(Enterprise Edition)
: 기업용 애플리케이션을 개발하는 데 필요한 여러 가지 도구 및 라이브러리들을 모아 놓은 것이다. 이 패키지는 응용서버, 웹서버,
J2EE API, 엔터프라이즈 자바 빈즈(JavaBeans) 지원, 자바 서블릿 API 와 JSP등을 포함한다.
Java ME(Micro Edition)
: 핸드폰, PDA, TV 셉톱박스, 프린터와 같은 모바일 기기나 다른 임베디드 장치들에서 실행되는 애플리케이션을 위한 강인하고
유연한 환경을 제공한다.
Java FX
: 리치 - 인터넷 - 애플리케이션(RIA : Rich Internet Application)을 생성하고 배포하기 위한 자바 클라이언트 플랫폼이다.
RIA는 서로 인터넷 상의 다양한 플랫폼에서도 동일한 외관으로 실행된다. 자바 기술에 기반을 두고, JavaFX 플랫폼은 고성능의
하드웨어 가속 그래픽과 미디어 엔진 API를 제공한다.
자바로 만들 수 있는 것
자바 애플리케이션(Java application)
: 독립적으로 실행될 수 있는 일반 응용 프로그램이다.
자바 애플릿(Java applet)
: 웹 브라우저 안에서 실행되는 작은 프로그램이다.
자바 서플릿(Java servlet)
: 웹 서버에서 동작하는 서버 모듈로서 클라이언트의 요구를 받아서 그에 대한 처리를 한 후에, 실행 결과를 HTML문서
형태로 클라이언트 컴퓨터로 전송한다.
JSP(Java Server Page)
: HTML안에 자바 코드를 넣으면웹페이지를 사용자와 상호작용 하도록 만들 수 있다. JSP는 서버에서 실행되고 결과를
사용자에게 보여준다.
안드로이드 애플리케이션(Android application)
: 스마트폰의 운영체제 중의 하나인 안드로이드는 운영 체제로는 리눅스(Linux)를 사용하지만, 운영체제를 제외한 안드로이드 SDK의
나머지 부분은 모두 자바로 작성되어 있다. 안드로이드 애플리케이션도 자바로 작성되어 있고, 안드로이드 개발자들은 자바의 SE 버전
중에서 AWT와 스윙(Swing)을 제외한 거의 모든 패키지를 사용할 수 있다. 안드로이드에서는 자바를 지원하기 위하여 효율성 문제로
자체적인 달빅(Dalvik) 가상 머신을 구현했다.
댓글