이 글은 The Java® Language Specification의 Introduction의 내용을 바탕으로 작성되었습니다.
Java?
- general-purposed, 동시성 지원, 클래스 기반의 객체지향 언어
- 동시성: 프로그램이 여러 작업 또는 스레드를 동시에 실행하고 관리할 수 있는 능력
- C와 C++과 관련이 있지만 C와 C++의 몇 가지 측면은 제외, 다른 언어들의 아이디어를 포함
- 연구 언어가 아닌 제품 언어
- 정적 타입 언어
- 정적 타입 언어(Statically Typed Language): 컴파일 시점에 변수 타입 지정
- 동적 타입 언어 (Dynamically Typed Language): 런타임 시점에 동적으로 타입이 결정됨
- 비교적 고수준 언어
- 가비지 컬렉터를 통한 메모리 자동 관리 기능 제공
- 명시적인 할당 해제(C의 free 등)의 안전 문제를 피할 수 있음
장점
- 플랫폼 독립성(Write Once, Run Anywhere)
- JVM(Java Virtual Machine) 위에서 실행
- 운영 체제나 하드웨어에 종속 X
- 여러 플랫폼에서 동일한 방식으로 실행 가능
- 객체 지향 프로그래밍(OOP)
- 코드의 모듈성, 재사용성, 유지보수성 ↑
- 코드의 가독성, 확장성 개선 가능
- 안전성
- 타입 검사 → 타입 안정성
- 메모리 자동 관리, 가비지 컬렉션 → 메모리 누수나 잘못된 메모리 관리로 인한 문제 방지
- 멀티스레딩 지원
- 병렬 처리, 동시성 구현 가능
- 대규모 애플리케이션, 네트워크 서버 등의 동시 처리가 필요한 환경에서 유용
단점
- 성능
- Java의 바이트코드를 해석하고 실행하는 과정에서 발생하는 오버헤드,가비지 컬렉션 작업에 따른 부담 → 타 언어에 비해 상대적으로 느린 실행 속도
- 메모리 사용
- 가비지 컬렉션 작업 → 일시적인 정지(pause) 발생 가능
- 가비지 컬렉션 알고리즘의 선택과 튜닝에 따라 메모리 사용량과 성능 간의 트레이드오프 발생 가능
- 자원 소비
- 자바 가상 머신(JVM) 위에서 실행 → 추가적인 시스템 자원 필요