JAVA
자바란
썬 마이크로 시스템즈에서 개발하여 1996년 01월 공식 발표. (이후 오라클이 인수)
모바일(J2ME), 대규모 기업환경(J2EE), XML 등을 지원.
자바의 특징
- 운영체제에 독립적.
- 자바는 JVM에 종속적이고, JVM은 운영체제에 종속적이다.
- 따라서 자바는 서로 다른 운영체제에 종속적인 JVM만 있으면 실행 가능하다.
- 객체지향 언어.
- 상속, 캡슐화, 다형성
- 자동 메모리 관리 (Garbage Collection)
- 주기적으로 사용하지 않는 메모리 반환
- 네트워크 분산처리 지원
- 네트워크 프로그래밍 라이브러리(Java API) 지원
- 멀티쓰레드 지원
- 시스템과 관계없이 멀티쓰레드 구현 가능.
- 여러 쓰레드에 대한 스케쥴링은 자바 인터프리터가 담당.
- 동적 로딩(Dynamic Loading) 지원
- 프로그램 시작시 모든 클래스를 로딩하는게 아니라 필요한 시점에 클래스를 로딩.
- 따라서 일부 클래스가 변경되어도 전체 애플리케이션 컴파일을 하지 않아도 됨.
JVM(Java Virtual Machine)
자바를 실행하기 위한 가상 머신.
자바는 하드웨어 맞게 컴파일된 상태가 아니고, 실행시 해석(interpret)되므로 네이티브 프로그램에 비해 느리다.
최근 바이트코드(컴파일 된 자바코드)를 바로 기계어로 바꿔주는 JIT 컴파일러 등 최적화 기술이 적용되어 빨라짐.
JDK
JDK를 설치하면, JVM과 자바클래스 라이브러리(Java API) 외 개발에 필요한 프로그램들이 설치된다.
JDK의 bin을 path로 지정해주면 해당 path의 프로그램들을 경로 없이 사용할 수 있다.
JDK의 bin 디텍토리에 있는 주요실행파일
- javac.exe - 자바코드를 바이트코드로 컴파일
- java.exe - 바이트코드를 해석하고 실행
- javap.exe - 바이트코드를 다시 자바코드로 디컴파일
- javadoc.exe - 소스파일의 주석(/* */)을 이용하여 JAVA API문서와 같은 형식의 문서를 자동생성.
- jar.exe - 압축프로그램. 클래스와 프로그램에 실행에 관련된 파일을 jar로 압축하거나 압축 해제.
|참고|
JDK = JRE + 개발에 필요한 실행파일(javac 등)
JRE = JVM + 클래스 라이브러리(Java API)
자바 공식 API문서
https://docs.oracle.com/javase/8/docs/api/index.html
https://docs.oracle.com/en/java/javase/11/docs/api/index.html
자바 문법
- 자바 애플리케이션은 항상 main 메서드의 호출로 시작해서 main 메서드의 수행을 마치면 종료된다.
- 하나의 Java 애플리케이션에는 반드시 하나의 main 메서드가 있어야 한다.
- 작성된 Java 애플리케이션을 실행 할 때는 'java ${메인메서드를 포함한 클래스의 이름}'을 적어줘야 한다.
- 하나의 소스파일에 하나의 클래스가 보통.
- 하나의 소스파일에 둘 이상을 정의도 가능.
- 소스파일의 이름은 public class와 같아야 함.
- 만약 public class가 없다면 아무거나 다른 class의 명.
- 클래스파일(*.class)는 클래스별로 하나씩 만들어지므로 여러 클래스를 가진 자바 코드 하나를 컴파일 했을 때 여러개의 class 파일이 생성될 수 있음.
자바 실행과정
- 프로그램의 실행에 필요한 클래스(*.class)를 로드한다.
- 클래스파일을 검사한다. (파일형식, 악성코드 체크)
- 지정된 클래스에서 main(String[] args)를 호출한다.
- main메서드가 종료되면 자원을 모두 반환한다.
참고
그림