
자바는 한 번 작성하면 하드웨어나 운영체제에 상관없이 어디에서나 실행 가능하다
.java(소스코드 작성) -> (자바 컴파일러) -> .class(바이트 코드 <- 바이너리 파일)
-> JVM 에서 실행 (java virtual machine 에서 바이트 코드를 해석 및 실행)
JDK는 개발자를 위한 툴이고 JRE는 자바 프로그램을 실행시키기 위한 환경을 구성하는데 JDK에는 JRE가 포함되어 있으므로 자바 응용프로그램을 개발하는 개발자는 JDK만 설치하면 된다.
자바 API(클래스 라이브러리)는 JDK 에 패키지 형태로 제공된다.
실행 시간에 사용되는 자바 API의 모든 클래스들을 모듈들로 분할
자바의 특징
객체 지향
- 상속성, 다형성, 캡슐화
클래스로 캡슐화
- 클래스 내에 모든 변수(필드), 함수(메소드) 구현해야 한다.
- 클래스 안에서 새로운 클래스(내부 클래스) 작성 가능
플랫폼 독립성
- 자바 가상 기계가 바이트 코드 실행
- 플랫폼에 종속성을 갖지 않음
소스(.java)와 클래스(.class) 파일
- 하나의 소스 파일에 여러 클래스 작성 가능
- public 클래스는 하나만 가능
- 소스 파일의 이름과 public으로 선언된 클래스 이름은 같아야 한다.
- 컴파일된 클래스 파일(.class) 에는 클래스는 하나만 존재
- 다수의 클래스를 가진 자바 소스(.java) 를 컴파일 하면 클래스마다 별도 클래스 파일(.class) 생성.
실행 모듈
- 한 개의 class 파일 또는 다수의 class 파일로 구성
- 여러 폴더에 걸쳐 다수의 클래스 파일로 구성된 경우
- jar 파일 형태로 배포 가능
main() 메소드
- 자바 응용프로그램 실행은 main() 메소드에서
- 하나의 클래스 파일에 하나 이상의 main() 메소드가 있을 수 없음
- 각 클래스 파일이 main() 메소드를 포함하는 것은 상관없음
멀티 스레드
- 자바는 OS 도움 없이 자체적으로 멀티스레드 지원
- C/C++ 등에서는 멀티스레드 운영체제 API 를 호출
패키지
- 관련된 여러 클래스를 패키지로 묶어 관리
- 패키지는 폴더 개념
가비지 컬렉션
- 자바는 응용 프로그램에서 메모리 반환 기능 없음, 메모리 할당 기능(new)만 있음
- 가비지 : 할당 후 사용되지 않는 메모리
- 자바 가상 기계가 자동으로 가비지 회수
실시간 응용 시스템에 부적합
- 자바 응용프로그램은 실행도중 예측할 수 없는 시점에 가비지 컬렉션을 실행하기 떄문에 일정시간 내에 반드시 실행 결과를 내야하는 실시간 시스템에 부적합
- 포인터의 개념 없음