본문 바로가기

프로그래밍 언어/Java

[Java] 자바의 특징




자바의 특징 



플랫폼 독립성 (Write Once Run Anywhere)


자바는 하드웨어, 운영체제 등 플랫폼에 종속되지 않은 독립적인 바이트 코드로 커파일되며 자바 가상 기계(JVM)만 있으면 하드웨어/운영체제를 가리지 않고 자바 프로그램의 실행이 가능하다.



◇ 객체 지향 언어


자바는 객체 지향 언어로서 캡슐화, 상속, 다형성 등을 지원한다. 캡슐화는 일반적으로 중요한 데이터를 보존, 보호하기 위해 연관 있는 변수와 함수를 클래스로 묶는 작업을 의미한다. 상속은 자식(하위, 파생) 클래스가 부모(상위) 플래스의 멤버를 물려받는 것을 의미하며, 자식이 부모를 선택해서 물려받을 수 있다. 다형성은 같은 타입이지만 실행 결과가 다양한 객체를 대입(이용)할 수 있는 성질이다.



◆ 클래스로 캡슐화


객체의 필드(속성), 메소드를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것을 말한다. 외부 객체는 객체 내부의 구조를 얻지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다. 필드와 메소드를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는 데 있고 캡슐화된 멤버를 노출시킬 지 숨길 지 결정하기 위해 접근 제한자를 사용한다. 클래스에 속하지 않은 필드나 메소드는 없고 클래스 안에 새로운 클래스, 즉 내부 클래슬르 만들 수 있다.



◇ 소스와 클래스 파일


자바 소스가 컴파일된 클래스 파일(.class)에는 반드시 하나의 자바 클래스만이 들어 있다. 그러므로 하나의 자바 소스 파일에 여러 개의 클래스를 작성한 경우, 커파일하면 클래스마다 별도의 클래스 파일이 생성된다.





위 그림은 A.java 에 4개의 클래스를 작성한 예이다. A.java 를 컴파일하면 4개의 클래스 파일이 생성된다. 클래스 D는 클래스 C 내에 작성된 내부 클래스(inner class)로서 C$D.class 이름으로 생성된다. 하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언할 수 있다. 소스 파일 내에 public으로 선언된 클래스의 이름과 소스 파일의 이름이 동일하게 작성되어야 한다. 



◆ 실행 모듈


자바 응용프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성된다. 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포 및 실행이 가능하다. 자바의 실행은 main() 메소드에서 시작되며, 하나의 클래스 파일에 두 개 이상의 main() 메소드가 있을 수 없다. 그러나 각 클래스 파일이 main() 메소드를 가지는 것은 상관 없다.



◇ 패키지


서로 관련 있는 클래스는 패키지로 묶어 관리한다. 패키지는 파일 시스템의 폴더 개념과 같다. 예를 들어, java.lang.System 클래스는 java/lang 폴더의 System.class 파일을 나타내며, 여기서 java.lang 을 패키지라고 부른다.



◆ 멀티스레드


하나의 자바 프로그램에서 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한다. 보통 멀티스레드 프로그램을 작성하기 위해서는 운영체제가 멀티스레드를 지원하고 멀티스레드와 관련된 API나 라이브러리를 제공해야만 한다. C/C++ 등 많은 언어들은 자체적으로 멀티스레드를 지원하지 않아 운영체제의 도움을 받는다. 그러나 자바는 운영체제의 도움 없이 멀티스레드 프로그래밍이 가능하기 때문에 멀티스레드를 지원하지 않는 운영체제에서도 자바를 이용하면 멀티스레드 프로그램을 개발할 수 있다.



◇ 가비지 컬렉션


자바 언어는 메모리를 할당받는 기능은 있지만 메모리를 반환하는 기능은 없다. 이것은 개발자로 하여금 대단히 기쁜 일이며, 프로그래밍의 부담을 대폭 줄여준다. 프로그램 내에 사용되지 않는 메모리는 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동으로 회수된다.



◆ 실시간 응용 시스템에 부적합


자바 응용프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로, 프로그램 실행이 일시적으로 중단된다. 이런 문제로 인해 일정 시간 (deadline) 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 자바 언어가 적합하지 않다.



◇ 자바 프로그램의 안전성


자바 언어는 타입 체크가 매우 엄격하며, C/C++ 와 달리 메모리의 물리적 주소를 사용하는 포인터의 개념이 없기 때문에 잘못된 자바 프로그램으로 인해 컴퓨터 시스템이 중단되는 일은 없다.



◆ 프로그램의 작성이 쉽다


자바 언어는 C/C++ 에 있는 포인터 개념이 없기 때문에 프로그램 작성에 부담이 적다. 또한 프로그램 개발을 쉽게 도와주는 다양한 라이브러리와 스윙 등 강력한 GUI 라이브러리를 지원하므로 프로그램 작성이 빠르고 쉽다.