JAVA의 회사
처음 개발한 선마이크로셋을 2009년에 오라클에서 인수하면서 현재 제공 회사는 oracle이다.
JDK & JRE
JDK(Java Development Kit)
자바 개발도구
JRE(Java Runtime Environment)
자바를 실행시키기 위해 필요한 컴파일된 자바 API(라이브러리라고 인지하면 될듯)와 자바 가상기계를 포함
JDK에 포함된 것들
- javac: 자바 컴파일러
- java: 자바 실행기
- javadoc: 자바 소스로부터 HTML 형식의 API 도큐먼트 생성
- jar: 자바 클래스 파일을 압축한 자바 아카이브파일(.jar)를 생성 및 관리
- jmod: 자바의 모듈파일(.jmod)을 만들거나 모듈 파일의 내용 출력
- jlink: 응용프로그램에 맞춘 맞춤형 JRE todtjd
- jdb: 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거
- javap: 클래스 파일의 바이트 코드를 소스와 함께 보여주는 디어셈블러
자바 배포판
JDK는 여러종류가 있는데 이것들을 배포판 이라고 부른다.
대표적인 배포판은 아래와 같다.
- Java SE(Standard Edition) - 자바 표준 배포판, 서버 응용프로그램, 데스크톱 응용프로그램을 만드는데 사용
- Java ME(Micro Edition) - 모바일용 배포판, 작은 장치를 만들때 적합한 JDK
- Java EE(Enterprise Edition) - 기업용 배포판 다중 사용자를 지원
JAVA9 의 변화점 (모듈화) & JAVA API
JAVA9 부터 모듈화를 지원하며 jmods폴더 내부에 모듈형태로 여러가지 클래스를 모아놓았다.
JAVA API와 모듈의 다른점은 뭘까?
내가 보는 책에서는 JAVA API를 묶어 패키지라 부르고 그 패키지를 묶어 모듈이라 그런다.
SourceFile과 Class파일
자바는 기본적으로 .java라는 확장자 명으로 소스코드를 쓰며 javac 명령어로 컴파일 하면 .class라는 바이트코드를 가진 파일이 나온다.
- JAVA의 파일명과 public클래스는 일치하여야 한다.(public클래스가 없다면 상관없다.)
- 하나의 Java application은 반드시 main을 포함한 class를 하나 가져야한다.
하나의 파일에 여러가지 클래스가 있는경우의 컴파일 결과
pubic class A{
}
class B{
}
class C{
class D{
}
}
위와 같은 소스파일이 있다면 아래와같이 컴파일 된다.
$를 이용하여 Depth를 구별한다.
A.class
B.class
C.class
C$D.class
자바의 특징
플랫폼 독립성
WORA(Write Once Run Anywhere)을 의미
하드웨어에 종속되지 않고 자바 가상기계만 있으면 어디서든 실행 가능한것을 의미한다.
객체 지향
자바는 객체 지향 언어로서 캡슐화, 상속, 다형성을 지원한다.
클래스로 캡슐화
자바는 캡슐화의 원칙을 철저히 지켜, 변수나 메소드는 반드시 클래스 내에 구현하도록 되어있다.
클래스에 속하지 않은 변수나 메소드는 있을 수 없다.또한, 클래스 안에 클래스(innerClass)를 만들 수 있다.
소스와 클래스 파일
클래스파일(.class)에는 반드시 하나의 자바 클래스만 들어 있다.
하나의 소스 파일에 여러개의 클래스를 작성한 경우, 컴파일하면 클래스마다 별도의 클래스 파일이 생성된다.
하나의 파일에 여러개의 클래스가 있다면 여러개의 클래스파일이 만들어진다.
main()메소드
자바는 기본적으로 클래스의 main()메소드를 읽어드리며 실행된다.
하나의 클래스파일은 하나의 main()메소드만 가질 수 있으며 각각의 클래스파일이 main()메소드를 가지는것은 상관없다.
패키지
서로 관련있는 클래스는 패키지로 묶어 관리한다.
멀티스레드
자바는 멀티스레드를 지원한다.
보통 멀티스레드는 운영체제가 멀티스레드를 지원하고 관련된 API나 라이브러리를 제공해야한다.
하지만 자바는 운영체제의 도움없이 멜티스레드 프로그래밍이 가능하다.
가비지 컬렉션
자바 언어는 메모리를 할당받는 기능은 있지만, 메모리를 반환하는 기능은 없다.
프로그램 내에서 사용되지 않는 메모리(가비지)는 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동회수된다.
엄격한 타입 체크
자바는 타입체크가 매우 엄격하기에 안전한 편이다.
JIT컴파일 방식 채택
자바 가상 기계는 인터프리터 방식으로 바이트 코드를 실행하므로 느리다고 알려져 있지만
최근에는 JIT(Just In Time)컴파일 방식을 채택해서 성능이 향상되었다.
실시간 응용프로그램에 부적합
자바는 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로 프로그램 실행이 일시적으로 중단된다.
이런 문제로 일정시간(deadline)내에 반드시 실행결과를 내야만 하는 실시간 시스템에서는 부적합하다.
'JAVA' 카테고리의 다른 글
[JAVA] 자바의 탄생과 WORA (0) | 2022.07.06 |
---|---|
[JAVA]행복한 꿈을 꾸는중 (0) | 2022.07.03 |