본문 바로가기

무언가 만들기 위한 지식/Java/Android

Java란 무엇인가?


물론 이런 한장의 포스팅 및 필자의 좁은 소견으로 자바가 무엇인지를 설명하기에는 좁디 좁지만,
적은 지식으로 약간의 개념을 정리해 보자.

Java는 Sun사의 제임스 고슬링(James Gosling)을 중심으로 연구원들에 의해 개발된 OOP 언어이다.


<자바의 아버지라고 칭송받는 제임스 고슬링>

처음에는 전자렌지등 가전제품 내에 동작하는 프로그램으로 시작되었지만 지금은 웹분야에서 많이 쓰이고 있다.
(라고는 했지만 필자가 JSP나 Servlet이나 Applet 개발 경험은 없다 -.,-)
[위키백과에 있는 Java의 철학, 핵심목표는 다음과 같다.]

1. 객체 지향 방법론을 사용해야 한다.
2. 같은 프로그램이 여러 운영체제에서 실행될 수 있어야 한다.
3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.
4. 원격코드를 안전하게 실행할 수 있어야 한다.
5. 다른 객체 지향언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

이중 2번의 "Write once, Run anywhere"라는 것을 토대로 어느 운영체제에서나 돌아갈 수 있는 것이 가장 큰 특징이다.
이러한 것은 JVM(JAVA Virtual Machine)을 통해 이루어 진다.
JVM은 다음 그림과 같은 특성을 갖는다.


눈여겨 볼 점은 컴파일 방식과 인터프리터 방식을 모두 사용한다는 것이다.
이 두방식은 서로 다른 특징을 가지고 있는데, 가장 큰 차이점은 컴파일 방식은 한번에 프로그램 정보를 모두 읽은후 바이너리코드를 생성하는 것이고, 인터프리터 방식은 한줄한줄 읽어서 처리한다는 점이다. 이는 속도면에서 차이가 있고 필요에 따라 다른 방식을 사용한다.

Java에서는 class파일을 컴파일을 통해 생성하고 생성된 바이너리 코드를 JVM을 통해 인터프리터 방식으로 실행하게 된다.


위 그림은 생성된 바이트 코드를 여러 시스템에서 동작가능하게 하는 모습을 보여준다.
실제로 JVM이라는 녀석이 초반에는 느려서 오히려 프로그램 실행속도를 느리게 한다는 평도 받았지만, 그 버젼이 높아지면서 그 속도도 많이 향상되어 불만들이 사라지고 있다.

그밖에 일반적인 특징으로는 포인터 및 메모리 관리등 혼란을 줄 수 있는 CPP의 요소들을 삭제 하였고, 쓰레드 및 소켓의 사용이 캡슐화되어 사용이 편리해 졌다.
(필자도 직접 C로 네트워크 프로그래밍을 해보고 나니 자바의 소켓클래스의 편리함을 몸소 느꼈다 ㅠ.ㅜ)


Java의 구조를 보면 위의 그림으로 나타낼 수 있다.
왼쪽의 JDK(Java Development Kit)는 사용자가 자바프로그램을 작성하고 실행해 볼 수 있도록 하는 필요한 도구와 클래스 라이브러리로 구성되어 있다. JRE(Java Runtime Environment)로 자바를 실행할 수 있는 환경이다.
자바 개발환경으로 이 두개를 설치하게 된다.

자바는 실행 위치와 종류에 따라 4가지 종류의 형태를 가진다. 
1. 애플릿(Applet!) : 프로그램에서 실행되는 소프트웨어 구성요소로 독립적으로 사용되지 않고 작은 기능을 가지고 있다.
    위치 - 네트워크의 원격 컴퓨터의 웹서버
    방식 - 네트워크를 통한 원격 전송
    실행 - 로컬의 웹 브라우저나 애플릿뷰어(Applet! Viewer)

2. 어플리케이션(Application)
    위치 - 자바가상머신이 있는 로컬 컴퓨터
    형태 - 독립적인 자바 실행 프로그램

3. 서블릿(Servlet) : 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램
    위치 - 네트워크의 원격 컴퓨터
    방식 - 웹서버를 통하여 CGI를 대체하는 서비스를 제공
    실행 - 네트워크의 원격 컴퓨터의 Servlet Container

4. 빈즈(Beans)
    자바로 만들어진 컴포넌트로서 윈도우에서의 ActiveX나 OCX와 같은 역할을 합니다. 독립적인 사용보다는 위에서 언급한 1,2,3의 부품 등으로 사용되지요.

※ 원문 : http://cafe.daum.net/dikorea/AAbG/16 , 위키백과



[자바의 버전 변천사]
자바 1.02 : 애플릿을 만들기 위한 용도로 250개의 클래스
자바 1.1 : 좀더 다양한 기능 및 GUI 코드 향상, 500개의 클래스
자바 2(1.2~1.4 이후) : 속도가 매우 강력해졌고 네이티브 고유코드와 거의 같은 속도로 실행된다. 이 때부터 J2ME, J2SE, J2EE세 종류로 분리되어 나오고 웹 및 모바일 어플리케이션의 주력 언어가 된다. 2,300개의 클래스
자바 5.0(1.5 이상) : 개발하기 편해지고 다른 언어의 장점들을 추가한다. 코드명 '타이거'라고 불린다.

자바 6.0 : 코드명 Mustang으로 현재 가장 최근에 릴리즈된 버젼이다. (현재 java.com에서 권장하는 버젼이다.)
자바 7.0 : 코드명 Dolphine, 아직 공식적으로 릴리즈 되지는 않았다. 다음 릴리즈로 대기중이다.

코드명을 보면 자바2 까지는 존재하는데 3 과 4가 빠진 모습을 볼 수 있다.
이는 사실 개발후 자바2에서 다음단계로 아주 큰 차이가 있었는데,
1.1에서 1.2로 버젼업되었을때 아주큰 변화를 강조하기 위해 자바2라는 표현을 사용했고, 이후에 나온 5.0의 경우 버젼이 1.5까지 올라와 있어 1.5에 맞추어 자바5라고 명명했다고 한다. 그리고 후로는 6, 7로 후속버젼이 나오고 있다.
사실 자바6나 자바 7도 개발사이에서는 1.6이나 1.7로 표현하기도 하는 듯 하다.

이 포스팅에서는 서블릿이나 기타 개발용이 아니라 자바의 기초 문법 및 테스팅이 주로 될 것이다.
(아직 자바쪽 프로그래머로 갈지 아닐지 모르기 때문에 기초만 닦아 놓으려고 한다 ㅠ.ㅜ)

통합개발툴(IDE)로는 이클립스(잠깐 써봤다.)등이 있지만, 필자의 경우 JDK및 JRE 설치후 EditPlus로 테스팅을 할 것이다.

[참고 사이트]
다음 정보 까페 : http://cafe.daum.net/dikorea/AAbG/16