💕 출처: 위키백과
자바(Java)는 자바로 기술된 프로그램 개발 및 실행을 할 수 있는 소프트웨어 모임의 총칭이다. 자바 프로그램은 운영
체제나 하드웨어에 의존하지 않는 바이트 코드(중간 언어)인 추상적인 코드로 구현된다. 따라서, 자바 프로그램을 실행하기 위해서는 자바 가상 머신(JVM)과 개발에 필요한 표준 라이브러리 세트와 컴파일러의 환경만 맞추면 자바 프로그램은 모든 환경에서 동일하게 동작한다. 이러한 실행환경과 개발환경을 제공하는 것이 자바 플랫폼이다.
1. 플랫폼 독립성 (Platform Independence)
자바는 "Write Once, Run Anywhere"라는 슬로건을 가지고 있습니다. 자바로 작성된 프로그램은 자바 가상 머신(JVM, Java Virtual Machine)에서 실행되기 때문에, 운영 체제에 관계없이 동일한 코드가 다양한 플랫폼에서 실행될 수 있습니다. 이는 자바 바이트코드(bytecode)라는 중간 코드로 컴파일되기 때문입니다.
2. 객체 지향 프로그래밍 (Object-Oriented Programming)
자바는 순수 객체 지향 언어로, 코드의 재사용성과 유지보수성을 높여줍니다. 객체 지향 개념인 상속, 다형성, 캡슐화, 추상화 등을 잘 지원하여 복잡한 소프트웨어 시스템을 효율적으로 관리할 수 있습니다.
3. 자동 메모리 관리 (Automatic Memory Management)
자바는 가비지 컬렉션(Garbage Collection)을 통해 자동으로 메모리를 관리합니다. 프로그래머가 메모리 관리를 직접 하지 않아도 되기 때문에 메모리 누수와 같은 문제를 줄일 수 있습니다.
4. 풍부한 표준 라이브러리 (Rich Standard Library)
자바는 풍부한 표준 라이브러리를 제공하여 개발자가 다양한 기능을 쉽게 구현할 수 있도록 지원합니다. 데이터 구조, 네트워크, GUI, 데이터베이스 연결 등 다양한 기능을 포함하고 있습니다.
5. 보안성 (Security)
자바는 다양한 보안 기능을 제공하여 안전한 네트워크 환경을 구축할 수 있습니다. 자바 애플릿(Applet)이나 자바 웹 애플리케이션은 샌드박스(Sandbox) 환경에서 실행되어 시스템 자원에 대한 무단 접근을 방지합니다.
6. 멀티쓰레딩 지원 (Multithreading Support)
자바는 멀티쓰레딩을 효과적으로 지원하여 병렬 처리를 쉽게 구현할 수 있습니다. 이를 통해 고성능 애플리케이션을 개발할 수 있습니다.
1. 속도 (Performance)
자바는 인터프리터 방식으로 실행되기 때문에 네이티브 코드로 컴파일된 언어(C, C++)보다 실행 속도가 느릴 수 있습니다.
2. 메모리 소비 (Memory Consumption)
자바는 가비지 컬렉션을 사용하여 메모리를 관리하기 때문에, 다른 언어에 비해 메모리 사용량이 많을 수 있습니다. 특히 대규모 애플리케이션에서는 메모리 관리가 중요한 문제가 될 수 있습니다.
3. 복잡성 (Complexity)
자바는 객체 지향 개념과 다양한 라이브러리를 사용하기 때문에, 초보자에게는 다소 복잡하고 학습 곡선이 가파를 수 있습니다. 특히, 대규모 시스템에서는 코드의 복잡성이 증가할 수 있습니다.
4. GUI 개발의 제한 (Limited GUI Development)
자바의 표준 GUI 라이브러리인 스윙(Swing)과 자바FX(JavaFX)는 다른 최신 GUI 프레임워크에 비해 기능과 성능 면에서 제한적일 수 있습니다. 따라서 GUI 중심 애플리케이션 개발에는 다른 언어나 프레임워크를 고려하는 경우도 많습니다.
5. 상대적으로 긴 실행 시간 (Longer Startup Time)
자바 애플리케이션은 JVM을 로드하고 초기화하는 과정이 필요하기 때문에, 다른 언어로 작성된 애플리케이션에 비해 초기 실행 시간이 길 수 있습니다.