본 포스팅은 '명품 JAVA Programming (개정4판)- 황기태 저' 책을 바탕으로 작성되었습니다.😀
프로그래밍 언어
- 기게어
- 어셈블리어
- 고급언어 - JAVA
언어의 진화
기계어 ➞ 어셈블리어 ➞ Fortran(수학 전용 언어) ➞ C ➞ C++
- C 언어 왜 생겼을까? (1972)
- 유닉스라는 운영체제를 개발하기 위해 만든 언어 : 절차 지향 언어 시대
- C++ 왜 생겼을까? (1983)
- PC가 생기면서 규모가 커져 만들고 관리하는 것이 너무 힘들어짐. 객체 지향언어 시대
- JAVA 왜 생겼을까? (1995)
- 나온 이유 : C++의 어떤 문제를 해결하기 위해 등장 (어떤 문제인지 아래에서 기술)
- C++의 모양을 빌어 등장. 조상이 C++이다
컴파일 방식
자바 : .Java ➞ .class (링킹 과정 없음)
C : .c ➞ .obj ➞ .exe
C++ : .cpp ➞ .obj ➞ .exe (컴파일 후 링킹 통해 실행 파일 생성)
자바의 태동
1991년 그린 프로젝트
- 선마이크로 시스템즈의 제임스 고슬링에 의해 시작
- 가전 제품에 들어갈 소프트웨어를 위해 개발
🍎 목적
- 플랫폼 호환성 문제 해결 → WORA
- 플랫폼 독립적인 언어 개발 → JAVA의 가상머신
- 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용 (LG 에어컨 종류만 100개, 다 다르다면?) → 동적 클래스 로딩
자바는 플랫폼 독링성, WORA
WORA(Write Onece Run Anywhere)
- 한 번 작성된 코드는 모든 플랫폼에서 실행될 수 있다.
- 해결되지 않은 문제 : 프로그램의 플랫폼 호환성이 없음
- 기계어가 CPU마다 다름
- 운영체제마다 API 다름
- 운영체제마다 실행파일 형식 다름
- 자바는 컴파일하면 바이트 코드가 만들어진다. → 바이트 코드 : 자바 가상 기계가 이해할 수 있는 코드
- 어떤 컴퓨터든 JVM을 깔아놓으면 모든 자바 코드가 돌아간다. → 자바 가상기계만 설치하면 자바로 짠 코드가 다 돌아간다.
- 의문. C언어의 경우 소스 코드를 배포하고 해당 컴퓨터에서 실행하면 되지 않나? 컴파일하고 실행파일을 만드는 것이 느려가 그런가
▶︎ WORA를 가능하게 하는 자바의 특징
- 바이트 코드
- 자바 소스를 컴파일한 목적 코드
- CPU에 종속적이지 않은 중립적인 코드 -> 모든 CPU에서 실행할 수 있다.
- JVM에 의해 해석되고 실행된다.
JVM (Java Virtual Machine)
자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)
- 자바 가상 기계 자체는 플랫폼에 종속적
- 자바 가상 기계가 응용프로그램을 구성하는 클래스 파일의 바이트 코드 실행
C / C++과 다른 점
✓ C/C++ 프로그램의 개발
- 여러 소스 파일로 나누어 개발
- 링크를 통해 필요한 모든 코드를 하나의 실행파일(.exe)에 저장
- 링커는 필요한 모든 코드를 하나의 exe 파일에 모두 저장한다.
실행
- 실행 파일(exe)은 모두 메모리에 올려져야 실행, 메모리가 작은 경우 낭패
✓자바 프로그램의 개발
- 여러 소스(.java)를 나누어 개발
- 바이트 코드 (.class)를 각각 만들지만 실행파일(exe)로 만드는 링크 과정이 없음
실행
- main() 메소드를 가진 클래스에서부터 실행 시작.
- 자바 가상 기계는 필요할 때, 클래스 파일을 로딩한다. ➞ 적은 메모리로 실행가능!
JDK와 JRE
JDK(Java Developmdent Kit)
- 컴파일러, 컴파일된 자바 API 클래스들이 들어 있는 모듈 파일, 샘플 등
JRE(Java Runtime Environment)
- 자바를 실행하기 위한 환경. JVM 포함
- 컴파일된 자바 API 들이 들어 있는 모듈 파일
📌 자바의 특성
- 플랫폼 독립성
- 객체지향
- 클래스로 캡슐화
- 클래스 내에 모든 변수, 함수를 구현해야 함. 바깥 구현 금지
- 소스(.java)와 클래스(.class)파일
- 같은 소스코드 파일안에 4개의 클래스가 있으면, 4개의 클래스 파일이 만들어짐. 내부 클래스도 마찬가지
- 자바는 동적으로 클래스 로딩을 함. 필요한 클래스을 바로 찾기 위해 같은 각 클래스 파일을 만드는 것.
- 멀티 스레드
- 가비지 컬렉션
- 개발자가 메모리를 반환할 수 있는 방법이 없음
- 자바 가상 기계가 자동으로 가비지 회수
- 실시간 응용 시스템에 부적합
- 가비지 컬렉션의 실행 시기는 예측할 수 없음
- 실행 속도를 개선하기 위해 JIT 컴파일러 사용
- 자바의 느린 실행 요인 : 인터프리터 방식으로 바이트 코드 실행
- JIT(Just in Time) 컴파일링 기법으로 개선
- 실행 도중 바이트 코드를 해당 CPU의 기계어 코드로 컴파일, 해당 CPU가 기계어를 실행
- 루프를 많이 도는 코드는 바로 기계어로 컴파일해버려서 CPU가 실행하도록 함
'CS > 자바' 카테고리의 다른 글
자바 #5 - 생성자와 접근 지정자 (1) | 2024.02.09 |
---|---|
자바 #4 - 객체지향 언어의 특징 (0) | 2024.02.07 |
자바 #3 - 자바의 배열과 예외 처리 (1) | 2024.02.04 |
자바#2 - 자바의 데이터 타입과 입력 (1) | 2024.02.04 |
Arrays.sort()와 Collections.sort() 차이 (0) | 2024.01.10 |