자바의 특징
1. 운영체제에 독립적
자바는 자바가상머신(JVM, Java Virtual Machine)을 통해 JVM이 설치되어 있는 OS에서는 모두 자바로 작성된 프로그램이 실행 가능하다.
자바 응용프로그램은 운영체제에 독립적이지만 JVM은 종속적이기 때문에 썬에서는 플랫폼마다 다른 JVM을 제공하고 있다.
2. 객체 지향 언어(Object Oriented Programming, OOP)
자바는 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어이다.
따라서 모든 기능은 객체로 만들어 사용해야 한다. (객체는 프로그램이 동작하는 부품이라고 생각)
여러 부품(객체)들을 만들고 조립하여 하나의 프로그램을 실행하는 개념이 OOP이다.
객체 지향적으로 설계된 프로그램은 유지보수가 쉽고 확장성이 높다.
- 객체 지향 언어의 반대는 절차 지향언어이다. (C언어)
- 컴퓨터 처리 방식과 유사하여 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다
- 유지보수가 어렵고 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다.
3. 함수형 프로그래밍 지원
자바 8버전부터 함수형 프로그래밍을 지원하는 문법인 람다식과 스트림이 추가되었다. 이를 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하기 쉬워지고 코드가 간결해지는 장점이 있다.
4. 자동 메모리 관리(Garbage Collection)
자바는 응용프로그램이 돌아가면서 가비지 컬렉터(Garbage Collector)가 자동으로 메모리를 관리하여 참조되고 있지 않는 메모리를 해제해 준다. 덕분에 프로그래머가 메모리를 관리할 필요가 없고 핵심 코드에 집중할 수 있게 되었다.
5) 네트워크와 분산처리를 지원
다양한 Java API 라이브러리들은 네트워크 및 분산처리와 관련된 기능을 쉽게 개발할 수 있도록 지원한다.
이러한 특징으로 인해 자바 언어는 대규모 분산처리 환경 등의 프로그래밍에 적합하다.
6) 멀티스레드를 지원한다.
자바에서 개발되는 멀티쓰레드 프로그램은 시스템에 관계없이 구현가능하며 관련된 라이브러리가 제공되므로 구현이 쉽다. 스케줄링은 자바 인터프리터가 담당하게 된다.
7) 동적 로딩을 지원한다.
자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에서 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 이 장점이 프로그램 유지 보수에 큰 장점이라 스프링이 이러한 특징을 잘 살려서 많은 웹 서비스에서 스프링이 서버 개발로써의 역할을 수행한다.
자바 프로그램 작성
자바는 컴파일러(Compiler)를 통해 기계어로 변환되는 언어이다.
컴파일이란 특정 프로그래밍 언어를 기계가 이해할 수 있는 언어로 바꿔주는 과정이다.
JVM(Java Virtual Machine)이 이해할 수 있는 코드(바이트코드, Bytecode)로 변환하는 것을 의미한다.
JVM은 바이트코드를 운영체제에 맞는 기계어로 변환해준다.
자바로 작성된 애플리케이션은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다.
JVM의 경우 JDK나 JRE를 설치하면 자동으로 설치된다. 자바는 JVM을 거치기 때문에 C, C++에 비해 속도는 느린 편이지만 JVM 내부의 최적화된 JIT 컴파일러를 통해 속도를 크게 개선해나가고 있다고 한다..
- JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
- JDK(Java Development Kit) : JRE + 개발에 필요한 도구
자바 프로그램만 실행할 것이라면 JRE만 설치해도 괜찮지만 프로그램을 개발하기 위해서는 JDK가 필요하다.
자바 프로그램 과정
자바 파일 -> javac 컴파일 -> 클래스 파일 생성 -> 자바 실행
- 자바 파일 생성 (*. java)
- 자바 파일 컴파일 (javac) -> 클래스 파일 생성 (Byte code)
- 실행 (JVM 사용)
'Programming > Java' 카테고리의 다른 글
| [Java] 조건문 (0) | 2022.12.31 |
|---|---|
| [Java] 연산자 (0) | 2022.12.31 |
| Scanner & BuffereReader (0) | 2022.12.30 |
| [Java] 문자열이란 ? (0) | 2022.12.29 |
| [Java] 변수란 ? (0) | 2022.12.29 |