1. 자바의 탄생 배경
- 개발 배경:
- 자바는 1991년, 제임스 고슬링과 선 마이크로시스템스(Sun Microsystems) 연구원들이 개발.
- 가전제품, 휴대용 장치 등에 독립적이고 안정적인 소프트웨어를 개발하기 위해 설계.
- 이전 상황:
- 당시 주로 사용되던 언어는 **C와 C++**로, 운영체제에 종속된 실행 파일을 생성.
- 자바는 이를 개선하여 운영체제 독립적 실행을 목표로 개발됨.
2. 자바와 운영체제 독립성
- C와 C++의 한계:
- 예: Test.exe는 윈도우에서 실행 가능하지만 리눅스에서는 불가능.
- 다른 운영체제에서 실행하려면 해당 환경에서 다시 컴파일 필요.
- 자바의 접근 방식:
- 자바 코드를 컴파일하면 **바이트 코드(Bytecode)**인 .class 파일 생성.
- 이 바이트 코드는 특정 운영체제와 무관하며, **JVM(Java Virtual Machine)**이 실행을 담당.
- 결과적으로, 한 번 작성한 자바 프로그램은 다양한 운영체제에서 실행 가능.
(Write Once, Run Anywhere)
3. 자바 가상 머신(JVM)과 JIT 컴파일러
- JVM(Java Virtual Machine):
- 자바 바이트 코드를 실행하는 환경.
- 운영체제에 맞는 **자바 실행 환경(JRE)**이 JVM을 제공.
- JIT(Just-In-Time) 컴파일러:
- 실행 시점에 바이트 코드를 기계어로 변환.
- 동일한 코드가 반복 실행될 경우 이전에 변환된 기계어를 재사용.
- 효율성:
- 이전의 해석기 방식(Java Interpreter)보다 성능이 10~20배 향상.
4. 자바의 객체 지향 프로그래밍
- 객체 지향의 정의:
- 프로그램의 흐름이 아닌, 객체 간의 상호작용을 중심으로 설계.
- 객체(Object): 프로그램의 대상, 데이터와 동작을 캡슐화.
- 장점:
- 공통 기능 수정 없이 새로운 기능 추가 가능.
- 유지보수 용이, 확장성 뛰어남.
- 예시:
- 쇼핑몰 시스템:
- 객체: 회원, 상품, 주문, 배송.
- 각 객체는 독립적이며 상호 협력.
- 쇼핑몰 시스템:
5. 자바의 안정성
- 안정적 설계:
- 포인터 제거:
- 메모리를 직접 제어하지 않아 오류 가능성 감소.
- 가비지 컬렉터(GC):
- 동적 메모리 관리를 자동화하여 효율적이고 안전한 메모리 사용 보장.
- 포인터 제거:
- 기존 언어 대비 개선:
- 자바는 C와 C++의 모호성과 불안정한 요소를 제거.
6. 주요 프로그래밍 언어와 자바 비교
언어특징속도
C | 속도가 빠르고 컴퓨터 하드웨어 제어 가능. | 가장 빠름 |
C++ | 객체 지향 언어, 클래스 사용 가능. | 빠름 |
Java | 운영체제 독립적, 안정적, 가비지 컬렉터 제공. | 상대적으로 느림 |
C# | 마이크로소프트에서 개발, 자바와 유사한 객체 지향 언어. | Java와 유사 |
7. 자바의 플랫폼 독립성
- 포팅 및 컨버팅 필요 없음:
- 자바는 리눅스와 윈도우 등 다양한 환경에서 동일하게 작동.
- MS와 SUN의 차이:
- MS: 윈도우 중심.
- SUN: 리눅스와 윈도우를 모두 지원하는 JRE 제공.
8. 자바가 제공하는 주요 장점
- 운영체제 독립성:
- JVM을 통해 다양한 플랫폼에서 실행.
- 안정성:
- 포인터 제거와 가비지 컬렉터로 메모리 관리 효율화.
- 객체 지향 프로그래밍:
- 유지보수와 확장성 뛰어남.
- 광범위한 활용:
- 웹 애플리케이션, 모바일 앱(Android), 엔터프라이즈 솔루션 등.
요약
- 자바는 C와 C++의 단점을 개선한 운영체제 독립적이고 안정적인 객체 지향 언어.
- JVM을 통해 플랫폼 독립성을 제공하며, JIT 컴파일러로 성능 최적화.
- 안정성, 유지보수성, 확장성에서 강점을 보이며, 다양한 분야에서 널리 사용.