개발/Java

[Java] 자바 언어의 특징

hojak99 2015. 11. 3. 14:01

자바 언어의 특징

 

자바 언어의 탄생배경

자바는 Sun Microsystems 사의 그린팀에서 개발된 프로그래밍 언어이다. 그린팀은 가정에서 사용할 수 있는 휴대용 기기간의 커뮤니케이션을 가능토록 하는 어플리케이션을 C++ 언어로 개발하고 있었다. 그러나 다중 상속으로 인한 복잡함, 메모리 할당으로 인한 문제들이 생겨났다. 그들은 좀 더 수월한 개발을 위해 새로운 언어를 개발했다. 이는 그린 팀의 제임스 고슬링이 사무실 밖 오크 나무의 이름을 따 오크라고 명명되었다. 하지만 이미 오크라는 이름이 상표로 등록되어있는 것을 알게 된 후, 임의로 뽑아낸 단어목록 중 자바를 선택하게 된 것이다. 차후 자바를 셋톱박스TV분야로 내보내는 것에 대하여 실패했으나(자바를 상용화하기 위해 만든 자회사인 FirstPerson은 셋톱박스TV에 사용할 프로그램을 개발할 환경을 제공하는 회사를 찾으려했으나 대기업인 SGI에게 밀려버리고 사라질 위기에 처함), 당시에 떠오르던 웹 분야가 요구하는 조건(네트워크에 강함, 플랫폼의 독립성이 있음, 안정적, 바이러스에 대하여 안전함)이 모두 성립하였기 때문에, 1995년 자바 개발팀은 ‘HotJAVA’ 라는 이름의 브라우저(자바 가상 머신의 퍼포먼스 제한 때문에 상당히 느렸음)를 출시하였다. 이는 전문가들에게 호평을 샀고 자바가 유명세를 탈 수 있는 기회가 되었다. Sun 사는 현재 자바를 통하여 데이터베이스 연동, 웹 서버, 임베디드 자바, 퍼스널 자바, 가상공간 등의 수많은 개발 환경을 제공하고 있다.

 

자바 언어의 특징

1. 자바는 포인터라는 것이 필요 없다. 포인터는 c/c++ 로 작업해본 사람들이 모두 지적하듯 제일 골치 아프고 시간을 잡아먹는 부분이고 실제 모든 프로그래밍 문제 중 60% 이상이 포인터 때문에 일어난다고 조사된 바도 있다. 그렇기 때문에 자바는 포인터라는 것을 없앴다.

 

2. 자바는 기존의 크로스플랫폼 개발 환경과 달리 대단히 풍부한 프레임웍스(Frameworks; 프로그래밍 작업을 용이하게 해주는 object libraries)을 갖추고 있다. 자바는 frameworks/libraries를 손쉽게 패키지화할 수 있기 때문에 다른 프로젝트에서 재사용하거나 상호 교환하는 것이 용이하다.

 

3. 속도가 느리다. 자바는 기본적으로 인터프리터 언어이므로 컴퓨터가 곧바로 이해할 수 있는 언어가 아니다.그래서 각각의 명령어를 일단 컴퓨터가 이해할 수 있는 언어로 바꾸어주는 인터프리터가 필요한데, 이를 JVM(Java Virtual Machine,자바 가상 머신)이라고 한다. 이렇게 중간에 JVM이 끼어 있으므로 속도가 느리다.

[2017.11.07 : 인터프리터 언어가 아니라 하이브리드 언어인 것 같다. .java 파일을 컴파일 후 .class 파일을 jvm으로 한 줄 한 줄 읽게 하기 때문이다.]

 

4. 자바는 안전하다. 왜냐하면 자바는 명시적인 포인터를 사용하지 않으며, 프로그램은 가상머신의 보호된 영역 안에서 실행되고, 네트워크 소스에서 가져운 클래스와 로컬 파일 시스템의 클래스를 패키지로 분리함으로써 보안을 추가하였고, 객체에 대한 접근 권한을 위배하는 악의적인 코드 조각이 있는지 체크하며, 클래스의 로컬디스크에 대한 읽기 쓰기 접근을 설정을 통해서 제어 할 수 있기 때문이다.

 

5. 자바가 실행되기 위해서는 windowslinux같은 운영체제(OS)가 제어하고 있는 시스템의 리소스의 일부인 메모리를 제어할 수 있어야 한다. 자바 프로개름은 JVM(Java Virtual Machine: 자바가상머신)이라는 프로그램만 있으면 실행이 가능한데, JVMOS에게서 메모리 사용권한을 할당밥고 JVM이 자바프로그램을 호출하여 실행하게 된다. OS한테선 독립되었지만 JVM이라는 프로그램에 종속적이게 된다.

 

6. 자동으로 메모리를 관리한다. 자바로 작성된 프로그램이 실행되면 가비지컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리 하지 않아도 된다. 만약 가비지컬렉터가 없다면 프로그래머가 사용하지 않는 메모리를 체크하고 반환하는 일을 수동적으로 처리해야 할 것이다.

 

7. 동적 로딩을 지원한다. 자바로 작성된 어플리케이션은 여러 가지의 클래스로 구성되어 있다. 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩돼지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다. 그 외에도 일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일하지 않아도 되며, 어플리케이션의 변경사항이 발생해도 비교적 적은 잡업만으로도 처리할 수 있는 유연한 어플리케이션을 작성할 수 있다.

 

8. 멀티쓰레드를 지원한다.

일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현방법도 상이하며,처리 방식도 다르다. 그러나 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과 관계없이 구현가능하며, 관련된 라이브러리가 제공되므로 구현이 쉽다. 그리고 여러 스레드에 대한 스케줄링을 자바 인터프리터가 담당하게 된다.

 

자바는 자동 가비지콜렉션에 의지해 메모리의 재생만을 할 수 있어 다른 자원상에서는 최근의 장면이 될지 모른다. 하지만 c++은 주로 RAII(Resource Acquisition Is Initialization)라는 관습에 의지한다.

두 차이점으로는 c++에서는 복합형의 객체를 스택영억에 할당하여 영억을 벗어나면 방식으로 사용하기도 하지만 자바에서는 복합형은 항상 힙영역에만 할당되고 가바지 콜렉터가 수거한다. 그리고 c++은 소멸자가 있지만 자바에는 종결자가 있다. 둘 다 객체가 소멸되기 직전에 호출되지만, 확연한 차이가 있다. c++의 객체 소멸자는 암시적으로(스택영역 변수의 경우)또는 명시적으로 객체를 할당 해제할 때 실행된다. 자바에서 객체의 할당 해제는 가비지 콜렉터가 암시적으로 처리한다. 그리고 c++에는 길잃은 포인터(dangling pointer, 이미 소멸된 객체를 가리키고 있는 포인터)가 문제가 될 수있다. 만약 길잃은 포인터를 사용하려 한다면 프로그램은 오류가 발생하게 된다. 하지만 가비지 콜렉터는 참조중인 객체는 소멸시키지 않으므로 문제가 발생하지 않는다.

 

자바에는 바이트코드라는 것이 존재한다. 자바 바이트코드는 플랫폼에 상관없이 자바 가상머신에 의해 실행될 수 있도록 정의된 중간코드이다. 자바 바이트코드로 컴파일 되기만 한다면 인터프리터인 자바 가상머신이 설치되어 있는 곳 어디에서든 실행시켜 줄 수 있다. 이는 자바 개발자 또는 사용자로 하여금 자바 프로그램을 개발하거나 사용할 때 그 플랫폼이 무엇이든 상관치 않아도 된다.

 

자바 언어의 활용 분야

첫 번째로 실시간 환경, 웍플로우 기능이 요구되는 금융과 사무 자동화, 인트라넷 부문에서 활용된다. 자바는 효율적인 데이터베이스 환경을 제공하기 때문이다. 온라인 은행 업무, 보안 무역, 실시간 문서 관리 등에 쓰인다. 두 번째로 게임 분야에서 쓰인다. 자바는 웹상에서 다중의 사용자가 인터렉티브한 게임을 할 수 있어 다중 사용자 게임에 쓰인다. 또한 컴퓨터 시뮬레이션은 물론 많은 게임 분야 업무에 쓰인다. 세 번째로 광고, 홈쇼핑 분야에 활용된다. 자바의 애니메이션 분야는 라이브 경매, 상호 작용 3D, 오디오/비디오 광고 등에 쓰인다.

 

자바 프로그램의 종류는 여러 가지로 나뉜다. 먼저 자바 애플리케이션은 JDK(자바 개발도구. JAVA SE는 일반적인 자바 프로그램을 개발하는 데에 사용되며 JAVAEE는 엔터프라이즈와 서버 환경 개발을 위해 사용되고 JavaME는 임베디드를 위한 프로그램에 사용됨) 와 함께 제공되는 자바 가상머신에 의해 독립적으로 실행될 수 있도록 작성된 프로그램이다. (윈도우의 DOS )에서 가상머신을 이용하여 실행시킨다. 두 번째로 자바 애플릿은 자바가 호환되는 웹 브라우저에 의해 실행되는 프로그램으로, 태그(<APPLET>~<APPLET>)을 이용해 HTML 페이지 내에 포함되어 실행하도록 한다. 세 번째로 자바 서블릿은 웹 서버 프로그램의 기능을 확장하기 위한다. 웹 서버 내에서 자바 런타임 환경과 함께 제공되는 가상 머신으로 실행되므로 웹에 내장된 가상머신으로 구동되는 자바 애플릿과는 차이가 있다. 네 번째로 자바 빈은 비주얼 베이직처럼 마우스로 버튼, 칸 등을 드래그 해 추가할 수 있다. 자바 빈은 하나의 완벽한 기능을 갖고 재사용 될 수 있다. 마지막으로 자바 패키지는 다른 자바 프로그램에 의하여 삽입되어 쓸 수 있는 자바 프로그램이다. 다른 프로그래밍 언어로 설명하자면 라이브러리라고 생각할 수 있다. 자바에서는 기본적으로 RT.jar이라는 자바 패키지가 제공된다.


JAVA 통합 개발 환경

 

1. Eclips (이클립스)

이클립스 재단에서 개발한 IDE이다자바를 비롯해 다양한 언어를 지원하는 범용 응용 소프트웨어 플랫폼이다. IBM의 웹스피어 스튜디오 애플리케이션 디벨로퍼란 이름으로 개발되었으나 엔진을 오픈소스로 공개해 지금의 이클립스가 되었다. 1년에 한 번씩 새 버전을 출시한다가격은 무료이나 쓸수록 무거워지는 것이 단점이다가장 널리 쓰인다.

 

2. Inteli J (인텔리 J)

인텔리 J는 이클립스와 주로 비교되는데이클립스에 비해 설치가 쉽고 간편하다는 장점이 있다반응 속도가 빠르며 메모리를 적게 먹고코드 수정 시 IDE에서 원래 작성되어있던 코드를 보여준다그러나 유료 IDE이며 안드로이드 개발이 취약하다는 점이 있다.

 

3. NetBeans (넷빈즈)

자바 가상 머신(JVM)이 갖춰진 환경이면 사용할 수 있다윈도우리눅스솔라리스맥에 설치 파일이 제공된다자바, C, C++, 그루비 등을 지원하며 썬 마이크로시스템즈가 개발했다무료 IDE이고데스크탑 환경을 위한 윈도우 플랫폼 개발에 유용하다비주얼 스튜디오와 같이 프레임 안에 컴포넌트를 드래그 해 배치할 수 있다.

 

4. J Builder (제이 빌더)

볼랜드가 개발한 자바 IDE이다그러나 중간에 사업을 접어버리는 바람에(중략)

 

우리는 이 중에서 이클립스 IDE를 설치하기로 했다이클립스는 각종 OS에서 구동이 잘 되는 편이고적정한 자동 완성 기능이 있기 때문이다업데이트가 자주 되기 때문도 있다인텔리J는 유료이기 때문에또 안드로이드 스튜디오 (구글이 인텔리J를 기반으로 개발한 것이 안드로이드 스튜디오임)를 추가로 깔고싶지 않은 마음에 포기했으며 넷빈즈는 비교적 올드한 느낌이 들고제이 빌더는.. 더 이상 언급하지 않도록 하겠다.

우리는 성공적으로 이클립스를 설치했으며 간단한 예제를 통해 작동이 잘 되는 것을 확인했다학교 노트북 램에 지장이 가지 않는 이상이클립스를 계속 사용할 것 같다.

반응형