1.1 자바란?
- 객체지향 프로그래밍 언어이다.
- 운영체제(Operating System, 플랫폼)에 독립적이라는 것. 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능하기 때문에 연영체제에 따라 프로그램을 전혀 변경하지 않고도 실행이 가능하다.
- 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로써 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있었다.
- C++의 장점을 채택하고 단점을 제외하며 비교적 배우기 쉽고 이해하기 쉬운 간결한 표현이 가능하도록 했다.
- 자바는 풍부한 클래스 라이브러리(Java API)를 통해 프로그래밍에 필요한 요소들을 기본적으로 제공하기 때문에 자바 프로그래머는 단순히 이 클래스 라이브러리만을 잘 활용해도 강력한 기능의 자바 프로그램을 작성할 수 있다.
- 자바는 지금도 꾸준히 자바의 성능을 개선하여 새로운 버전을 발표하고 있다.
1.2 자바의 역사
- 1991년에 썬의 엔지니어들에 의해서 고안된 오크(Oak)라는 언어에서부터 시작
- 처음에는 C++을 확장해서 사용하려했지만 그들의 목적을 이루기에 부족하다는 것을 깨달음
- 그래서 C++의 장점을 도입하고 단점을 보완한 새로운 언어를 개발
- Oak는 처음에는 가전제품이나 PDA와 같은 소형기기에 사용될 목적이었으나 여러종류의 운영체제를 사용하는 컴퓨터들이 통신하는 인터넷이 등장하자 운영체제 독립적인 Oak가 이에 적합하다고 판단하여 Oak를 인터넷에 적합하도록 그 개발 방향을 바꾸면서 자바(Java)로 변경
- 자바로 개발한 웹브라우저인 '핫 자바(Hot Java)'를 발표하고 그 다음 해인 1996년 1월에 자바의 정식 버전을 발표
1.3 자바언어의 특징
- 운영체제에 독립적이다.
- 에뮬레이터인 자바가상머신(JVM)을 통해서 가능
- 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.
- 자바로 작성된 프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이어서 썬에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공하고 있다.
- 자바로 작성된 프로그램은 운영체제와 하드웨어에 관계없이 실행 가능하며 이것을 "한번 작성하면, 어디서나 실행된다.(Write once, run anywhere)'고 표현하기도 한다.
- 객체지향언어이다.
- 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어라는 평가를 받고 있다.
- 비교적 배우기 쉽다.
- 자바의 연산자와 기본구문은 C++에서, 객체지향관련 구문은 스몰톡(small talk)이라는 객체지향언어에서 가져왔다. 이 들 언어의 장점은 취하면서 복잡하고 불필요한 부분은 과감히 제거하여 단순화함으로서 쉽게 배울 수 있으며, 간결하고 이해하기 쉬운 코드를 작성할 수 있도록 하였다.
- 객체지향언어의 특징인 재사용성과 유지보수의 용이성 등의 많은 장점에도 불구하고 배우기가 어렵기 때문에 많은 사용자층을 확보하지 못했으나 자바의 간결하면서도 명료한 객체지향적 설계는 사용자들의 객체지향개념을 보다 쉽게 이해하고 활용할 수 있도록 하여 객체지향 프로그래밍의 저변확대에 크게 기여했다.
- 자동 메모리 관리(Garbage Collection)
- 자바로 작성된 프로그램이 실행되면, 가비지컬렉터(garbage collector)가 자동적으로 메모리 관리를 해줌. 따라서 프로그래머는 메모리 관리를 하지 않아도 된다.
- 네트워크와 분산처리를 지원한다.
- 인터넷과 대규모 분산환경을 염두에 둔 까닭에 풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원
- 멀티쓰레드를 지원한다.
- 일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현방법도 상이하며, 처리방식도 다르나 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현 가능하며, 관련된 라이브러리(Java API)가 제공되므로 구현이 쉽다.
- 여러 쓰레드에 대한 스케줄링(scheduling)을 자바 인터프리터가 담당하게 됨
- 동적 로딩(Dynamic Loading)을 지원한다.
- 보통 자바로 작성된 애플리케이션은 여러 개의 클래스로 구성되어 있다. 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다.
- 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.
1.4 JVM(Java Virtual Machine)
- 자바를 실행하기 위한 가상 기계, 컴퓨터
- '가상 기계(virtual machine)'는 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어이며, 컴퓨터의 성능이 향상됨에 따라 점점 더 많은 하드웨어들이 소프트웨어화되어 컴퓨터 속으로 들어오고 있다.
- 그 예로는 TV와 비디오를 소프트웨어화한 윈도우 미디어 플레이어라던가, 오디오 시스템을 소프트웨어화한 윈앰프(winamp) 등이 있다.
- '가상 컴퓨터(virtual computer)'는 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터라고 생각하면 된다.
- 자바로 작성된 애플리케이션은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다.
- 일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데 비해 Java 애플리케이션은 JVM을 한 번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점을 가지고 있다.
- 그러나 요즘엔 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 바로 변환해주는 JTT컴파일러와 향상된 최적화 기술이 적용되어서 속도의 격차를 많이 줄임.
'Back-end > JAVA' 카테고리의 다른 글
| 2.4 화면에서 입력받기 - Scanner (0) | 2026.01.27 |
|---|---|
| 2.3 형식화된 출력 - printf() (0) | 2026.01.16 |
| 2.2 상수와 리터럴(constant & literal) (0) | 2026.01.12 |
| 2. 변수의 타입 - 2.1 기본형(primitive type) (0) | 2026.01.11 |
| 02. 변수 (0) | 2026.01.10 |