1.2 자바의 출현과 WORA
- 자바는 타 언어와 달리 플랫폼 독립성 가짐(WORA)
- 자바 가상기계와 바이트코드
- 바이트코드: 자바 컴파일러가 자바소스 프로그램을 컴파일한 일종의 기계어(중립적 코드)
- 자바가상기계(JVM)에 의해 실행되는 바이너리 코드- 플랫폼 종속적
- CPU에 의해 직접 실행되지 않고 자바가상기계에 의해 interpreter바이식으로 한 명령씩 해석되어 실행
- 자바 프로그램의 입장에서 JVM은 운영체제이자 컴퓨터.
- 플랫폼에 적합하게 서로 다르게 구현-> 플랫폼 종속적(BUT 동일한 자바 프로그램에게 동일한 인터페이스와 실행환경 제공
- 자바 프로그램의 입장에서 JVM은 운영체제이자 컴퓨터.
- 바이트코드: 자바 컴파일러가 자바소스 프로그램을 컴파일한 일종의 기계어(중립적 코드)
- 자바 가상기계는 사용자가 작성한 클래스 파일 로딩-> 바이트 코드 하나씩 실행.
- 프로그램 실행 도중 JRE의 클래스 파일이나 사용자가 작성한 다른 클래스 파일이 필요하면 그 때 필요한 클래스파일 로딩&실행.
- 메모리가 충분한 PC에서는 실행 중 클래스 로딩으로 인한 시간 지연 줄이기 위해 사용자 클래스 파일, 필요한 JRE 파일 미리 로딩해둠
1.3 개발 도구와 자바 플랫폼
JDK와 JRE
- JDK(JAVA Development Kit): 자바 개발자에게 무료배포하는 소프트웨어 - 자바 컴파일러등의 개발도구와 JRE(JAVA Runtime Environment: 자바 API-이미 컴파일된 다양한 클래스 라이브러리, 자바가상기계 포함)로 구성.
- 모듈: 자바 패키지들, 이미지, XML파일 등의 자원을 묶은 단위
1.5 이클립스를 이용한 자바 프로그램 개발
- IDE: 소스코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 소프트웨어 통합 개발 환경(Visual studio, 이클립스)
1.7 자바의 특징
- 플랫폼 독립성, 객체지향, 클래스로 캡슐화(변수나 메소드는 반드시 클래스 내에 구현, 클래스 안에 내부클래스 만들 수 있음)
- 자바소스가 컴파일된 클래스파일(.class)에는 반드시 하나의 자바 클래스만이 들어있다.
- 하나의 자바소스파일에 여러개의 클래스를 작성한 경우, 컴파일하면 클래스마다 별도의 클래스파일 생성
- 하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언할 수 있다.
- 소스파일 내에 public으로 선언된 클래스의 이름과 소스파일의 이름이 동일하게 작성되어야 한다.
- 자바응용프로그램은 한 개 이상의 클래스파일로 구성, 다수의 클래스파일을 jar 파일형태로 압축하여 배포 및 실행 가능.
- 자바의 실행은 main()메소드에서 시작, 하나의 클래스 파일에 두 개 이상의 main()메소드가 있을 수 없다.
- 각 클래스 파일이 main()메소드 갖는 것은 상관없음.
- 자바의 실행은 main()메소드에서 시작, 하나의 클래스 파일에 두 개 이상의 main()메소드가 있을 수 없다.
- 서로 관련있는 클래스는 패키지로 묶어 관리한다.(폴더처럼)
- ex. java.lang.System 클래스는 java\lang 폴더의 System. class 파일. 여기서 java.lang : 패키지
- 멀티스레드: 하나의 자바 프로그램에서 다수의 스레드가 동시에 실행할 수 있는 환경 지원.
- 타언어들과 달리 운영체제의 도움 없이 멀티스레드 프로그래밍 가능
- 가비지 컬렉션
- 자바언어는 메모리를 할당받는 기능은 있지만 메모리를 반환하는 기능은 없음. -> 프로그램 내에 사용되지 않는 메모리는 자바가상기계의 가비지 컬렉션 기능에 의해 자동으로 회수.
- 실시간 응용 시스템에 부적합.
- 자바 응용프로그램은 실행도중 예측할 수 없는 시점에 가비지컬렉션 실행 -> 프로그램 실행이 일시적으로 중단.
- 일정시간 내에 반드시 실행결과를 내야만 하는 실시간 시스템에는 적합 x
- 자바 응용프로그램은 실행도중 예측할 수 없는 시점에 가비지컬렉션 실행 -> 프로그램 실행이 일시적으로 중단.
- 타입체크 매우엄격, 포인터개녑 x -> 안전
'언어 > JAVA' 카테고리의 다른 글
ch05. 상속 (0) | 2025.03.26 |
---|---|
[JAVA] ch04. 클래스와 객체 (0) | 2025.01.06 |
[JAVA] ch03. 반복문과 배열 그리고 예외 처리 (0) | 2025.01.03 |
[JAVA] ch02. 자바 기본 프로그래밍 (0) | 2025.01.01 |