Java의 시작
명품 java programming이라는 책을 보고 몰랐던 부분이나 기억해야하는 부분을 정리해서 올리려 한다. 이 글에서는 java의 시작이라는 파트를 정리 해보았다.
- Java는 고급언어이자 객체지향 언어이다.
- Java의 컴파일러는 확장자가 .java인 소스를 .class로 컴파일하여 .class 파일은 JVM(자바 가상 기계)에 의해 실행된다.
- 제임스 고슬이에 의해 개발 시작
- WORA(Write Once Run Anywhere) : 기존의 c/c++은 플랫폼(하드웨어 플랫폼 + 운영체제 플랫폼)에 따라 코드를 작성하거나 다시 컴파일 하여야 했는데 Java는 JVM을 통해서 어느 플랫폼에서든지 한 번 작성하면 다 실행이 가능하다(= 플랫폼에 독립적이다.)
5.바이트 코드 : JVM에서 실행되는 기계어로서 어떤 CPU와도 관계없는 바이너리 코드이다. 어떤 운영체제에서도 JVM만 있으면 실행 가능하다.(.class)- Java는 플랫폼에 독립적이지만 JVM은 운영체제따라 그에 맞게 구현되어 있기 때문에 플랫폼에 종속적이다.
JAVA 특징
1. 플랫폼 독립성 - 위에서도 말했듯이 JAVA는 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일 되며 JVM만 있으면 하드웨어/운영체제를 막론하고 자바 프로그램의 실행이 가능하다.
2. Class로 캡슐화 - 자바는 객체 지향 언어의 캡슐화 원칙을 철저히 지켜, 변수나 메소드는 반드시 클래스 내에 구현하도록 한다. 클래스에 속하지 않는 변수나 메소드는 있을 수 없다. 자바는 클래스 안에 새로운 클래스, 즉 내부 클래스를 만들 수 있다.
3. 소스와 클래스 파일 - 클래스 파일(.class)에는 반드시 하나의 자바 클래스만 들어 있다. 그러므로 하나의 자바 소스 파일에 여러 개의 클래스를 작성한 경우, 컴파일 하면 클래스마다 별도의 클래스 파일이 생성된다. 하나의 자바 소스파일에 작성된 클래스 중 하나만이 public으로 선언할 수 있다. 소스파일 내에 public으로 선언된 클래스의 이름으로 자바 소스 파일을 저장해야 한다. (public이란 접근제어자를 추가하면 그 클래스의 이름은 파일명과 동일해야 한다. 가독성이 좋게 하기 위해서)
4. 실행 코드 배포 - 자바 응용프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성된다. 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포하거나 실행할 수 있다. JAVA9 부터는 자바 응용프로그램을 위한 맞춤형 커스텀 JRE를 만들어 실행시킬 수 있다. 자바의 실행은 main() 메소드에서 시작되면, 하나의 클래스 파일에 두개 이상의 main()메소드가 있을 수 없다. 그러나 각 클래스 파일이 main()메서드를 가지는 것은 상관 없다.
5. 패키지 - 서로 관련 있는 클래스는 패키지로 묶어서 관리한다. 패키지는 파일 시스템의 폴더와 같은 개념이다.
6. 멀티스레드 - 하나의 자바 프로그램이 다수의 작업을 처리할 수 있도록 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한다. 보통 멀티스레드 프로그램을 작성하기 위해서는, 운영체제가 멀티스레드를 지원하고 멀티스레드와 관련된 API나 라이브러리를 제공해야 한다. C/C++ 등 많은 언어들은 자체적으로 멀티스레드를 지원하지 않아 운영체제의 도움을 받는다. 그러나 자바는 운영체제의 도움 없이 멀티스레드 프로그래밍이 가능하다. 그렇기 때문에 멀티스레드를 지원하지 않는 운영체제에서도 자바를 이용하면 멀티스레드 프로그램을 개발할 수 있다.
7. 가비지 컬렉션 - 자바 언어는 메모리를 할당받는 기능은 있지만, 메모리를 반환하는 기능은 없다. 이것은 프로그래밍의 부담을 대폭 줄여준다. 프로그램 내에 사용되지 않는 메모리(가비지)는 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동으로 회수된다.
8 실시간 응용 시스템에 부적합 - 자바 응용프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로 프로그램 실행이 일시적으로 중단된다. 이런 문제로 인해 일정 시간(deadline) 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에서는 자바 언어가 적합하지 않다.
9. 프로그램 작성이 쉽다 - 자바 언어에는 C/C++에 있는 포인터 개념이 없기 때문에 프로그램 작성에 부담이 적다. 또한 프로그램 개발을 쉽게 도와주는 다양한 라이브러리와 스윙 등 강력한 GUI 라이브러리를 지원하므로 프로그램 작성이 쉽고 빠르다.
10. 실행 속도를 개선하기 위해 JIT컴파일러가 사용된다 - 자바는 자바 가상 기계가 인터프리터 방식(한줄씩 실행)으로 바이트 코드를 실행하므로 일반적으로 C/C++로 작성된 프로그램보다 실행이 느리다고 알려져 있지만, 최근에는 실행하는 도중 자바 프로그램을 해당 CPU의 기계어 코드로 컴파일하고 CPU가 바로 기계어를 실행 하도록 하는 JIT(Just In Time) 컴파일링 기법을 이용하므로 , 실행 성능이 C/C++과 거의 비슷하도록 개선되었다.