
Java의 특징
Write once, run anywhere
한 번 쓰면, 어디서든 실행된다
- 플랫폼 독립적 언어
- 플랫폼(OS)에 관계 없이, 한 번 작성하면 어디서든 실행 가능
- 프로그램 실행의 주체가 운영 체제가 아닌 JVM(Java Virtual Machine, 자바 가상 머신)이기 때문
- 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어
- 캡슐화, 상속, 다형성 등을 지원
- 코드의 재사용성이 높고, 유지 보수가 쉬움
- 자동 메모리 관리 / GC(Garbage Collection)
- GC가 메모리를 자동으로 관리하여 개발자가 직접 메모리를 해제할 필요가 없음
Java의 처리 과정
C/C++처럼 소스 코드를 기계어로 직접 컴파일하지 않고, Bytecode를 생성한 뒤 기계어로 바꾸어 실행함
- Java program
- Java 언어를 사용한 프로그램을 작성하여 .java 확장자를 가진 소스 코드 파일을 생성
- javac (Java compiler)
- 생성한 .java 파일을 javac를 사용하여 컴파일
- .java 파일을 .class 파일(Bytecode)로 변환
- Bytecode → JVM
- JRE의 Java classloader를 통해 Bytecode 파일을 JVM 메모리로 로드
- JVM
- 우선 JVM 실행 엔진에서 Bytecode 파일이 유효한지 검증
- Bytecode 파일이 유효하다면 JIT(Just-In-Time) 컴파일러로 기계어 변환 및 실행
- 인터프리터를 사용할 경우, 기계어로 컴파일하지 않고 한 줄씩 실행 (느림)
- GC (Garbage Collection)
- 더 이상 사용되지 않는 객체를 자동으로 제거하여 메모리 관리
Java의 주요 구성 요소
- JVM (Java Virtual Machine)
- Java Bytecode를 실행하는 가상 머신
- 운영체제와 독립적으로 작동하여 플랫폼 독립성을 보장함
- JDK (Java Development Kit)
- JRE, Javac, Java API, 디버거 등이 포함된 개발 도구
- JRE (Java Runtime Environment)
- JVM + 라이브러리
- Java 프로그램을 실행하는데 필요한 환경
Java의 구성 단위
※ Eclipse 환경 기반 설명
계층적 구조로, 상위 단위는 하위 단위를 포함함


- Workspace
- 최상위 작업 공간으로, 여러 Project를 포함함
- 여러 Project를 그룹화하는 단위
- Project
- 하나의 독립적인 Java 프로그램 또는 라이브러리를 의미
- 여러 Package, Class 등을 포함함 (최소 1개의 Class를 포함해야 함)
- 소스 코드 폴더 (src/)에 저장됨
- Package
- Namespace 역할을 하며, Class 간의 이름 충돌 방지 (Class 이름이 같아도 Package 다르면 다르게 인식)
- 관련 Class 및 Interface를 그룹화하는 단위
- Class
- Object(객체)를 생성하는 기본 단위
- 모든 Java 프로그램은 하나 이상의 Class를 포함해야 함
- 하나의 .java 파일 안에 Public Class는 반드시 하나만 있어야 하며 파일명과 동일해야 함
- Method & Field
- Method는 함수, Field는 변수
- main() Method가 없으면, 해당 Class 직접 실행 불가 (다른 Class에서 호출은 가능)
- Method 안에 Method 생성 불가
- 매개변수(Parameter, Argument)를 추가 가능
- Parameter는 정의된 변수, Argument는 입력되는 값
package com.example; // Package
public class Car { // Class
String brand; // Field
public Car(String brand) { // Constructor (생성자)
this.brand = brand;
}
public void drive() { // Method
System.out.println(brand + " car is driving.");
}
}'Programming > Java' 카테고리의 다른 글
| [Java] is-a 관계와 has-a 관계 (0) | 2025.03.04 |
|---|---|
| [Java] 상속 (Inheritance) (1) | 2025.03.04 |
| [Java] 생성자 (Constructor) (0) | 2025.03.04 |
| [Java] 클래스 변수, 인스턴스 변수, 로컬 변수, 매개 변수 (0) | 2025.02.28 |