Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Algorithm
- Elasticsearch
- Spring
- 객체지향
- Generics
- 알고리즘
- 백준
- 계산기 만들기
- 내일배움캠프
- 완전탐색
- 누적합
- binary search
- 프로그래머스
- ES
- BFS
- 이분탐색
- til
- 리팩토링
- 구현
- parametric search
- 이분 탐색
- Baekjoon
- 코딩테스트
- 브루트포스
- Java
- OOP
- programmers
- 일정 관리
- querydsl
- SpringBoot
Archives
- Today
- Total
개발하는 햄팡이
[Java 기초] Java란? 본문
1. Java의 개요
Java는 1995년 썬 마이크로시스템즈(Sun Microsystems)에서 발표된 객체 지향 프로그래밍 언어이자, 이를 기반으로 한 실행 환경(런타임)이다. James Gosling을 비롯한 팀이 설계한 Java는 “Write Once, Run Anywhere”(한 번 작성하면 어디서나 실행 가능)라는 슬로건 아래, 플랫폼에 독립적인 개발을 목표로 만들어졌다.
2. Java의 주요 특징
- 플랫폼 독립성
Java 바이트코드로 컴파일 → JVM에서 실행 JVM만 설치되어 있으면 어디서나 실행 가능 Python 소스코드(또는 바이트코드) 인터프리트 인터프리터가 설치된 환경에서만 실행 C++ 네이티브 머신코드로 컴파일 플랫폼별로 별도 컴파일 필요 - Java 컴파일러(javac)는 소스 코드를 바이트코드(.class 파일)로 변환.
- 이 바이트코드는 JVM(Java Virtual Machine)이 설치된 어떤 운영체제에서도 동일하게 실행된다.
- Java는 .class 바이트코드를 JVM이 해석하기 때문에, Windows/Mac/Linux 구분 없이 “한 번 작성하면 어디서나 실행”이 가능
- 객체 지향(Object‑Oriented) 언어
- 모든 코드가 클래스(class) 단위로 구성되며, 상속(inheritance), 캡슐화(encapsulation), 다형성(polymorphism) 등의 OOP 원칙을 따라야 함.
- 유지보수에 용이하다.
- 자동 메모리 관리(Garbage Collector)
- 개발자가 직접 메모리를 해제할 필요 없이, JVM이 사용하지 않는 객체를 자동으로 수집.
- C는 개발자가 메모리를 직접 관리하여 최적화를 할 수 있다는 장점이 있지만 메모리 누수, 이중 해제 등의 위험이 있다.
- Python도 Java와 같이 Garbade Collector가 존재하지만 메모리 구조나 GC의 동작 차이로 인해 Java의 GC는 다양한 옵션을 선택할 수 있지만 Python은 오버헤드가 발생할 수 있다.
- 강력한 표준 라이브러리
- 컬렉션, 네트워킹, 파일 입출력, 스레딩, GUI, 데이터베이스 연동(JDBC) 등 방대한 표준 API를 제공
- Java는 기업용 웹·엔터프라이즈 시스템에 강하며, 안정적이고 방대한 프레임워크가 특징
- Python은 데이터 과학·머신러닝, 스크립팅에 특화된 생태계가 발달해 있다.
- 멀티스레딩 지원
- Thread 클래스와 java.util.concurrent 패키지를 통해 동시성 프로그래밍을 간편하게 구현할 수 있음
- 안전성 & 보안성
- JVM의 바이트코드 검증, 클래스 로더(class loader) 분리, 보안 매니저(Security Manager) 등을 통해 외부 코드 실행 시에도 안전성을 보장
3. Java의 역사와 발전
1991년 | Green 프로젝트 시작 |
1995년 | Java 1.0 발표 (“Write Once, Run Anywhere” 등장) |
1998년 | Java 2 플랫폼(J2SE) 출시 |
2004년 | Java 5(Generics, 애노테이션, 향상된 for문, enum 추가) |
2006년 | OpenJDK 오픈소스 공개 |
2011년 | Oracle, Sun Microsystems 인수 |
2014년 | Java 8(람다 표현식 및 스트림 API, java.time 패키지 추가) |
2018년 | Java 11(Http Client API 표준화) |
4. JDK, JRE, JVM
4.1. JVM (Java Virtual Machine)
- 역할
- 바이트코드(.class 파일)를 해석·실행하는 런타임 엔진
- 메모리 영역(Heap, Stack, Metaspace 등) 관리
- 가비지 컬렉션(GC)을 통해 객체 메모리 해제
- 구성 요소
- Class Loader Subsystem
- .class 파일을 읽어들여 JVM 메모리로 로드
- Bootstrap, Extension, Application 클래스 로더로 구분
- Runtime Data Areas
- Method Area: 클래스 메타데이터, 상수 풀, static 변수
- Heap: 모든 객체 인스턴스 저장
- Stack: 각 스레드별 호출 프레임, 로컬 변수 및 연산 스택
- PC Register: 현재 실행 중인 바이트코드 주소 저장
- Native Method Stack: 네이티브(C/C++) 코드 호출용 스택
- Execution Engine
- Interpreter: 바이트코드를 한 줄씩 해석 실행
- JIT Compiler: 자주 실행되는 바이트코드를 네이티브 코드로 변환하여 성능 최적화
- Garbage Collector
- 세대별(Young/Old) 혹은 region 기반(G1, ZGC 등)으로 자동 메모리 회수
- Class Loader Subsystem
4.2. JRE (Java Runtime Environment)
- 역할
- JVM과 Java 표준 라이브러리(API)를 묶은 실행 환경
- 개발 없이 “Java 애플리케이션 실행”만 필요할 때 설치
- 구성 요소
- JVM 구현체 (위 1번)
- Core Libraries
- java.lang, java.util, java.io, java.net, java.nio 등
- Runtime Tools
- java(애플리케이션 실행), javaw(윈도우 GUI용)
4.3. JDK (Java Development Kit)
- 역할
- Java 애플리케이션 개발에 필요한 도구 모음
- 구성 요소
- JRE (위 2번)
- Compiler (javac)
- .java 소스 코드를 바이트코드(.class)로 컴파일
- Development Tools
- jar: 클래스와 리소스를 JAR(Java ARchive) 파일로 패키징
- javadoc: 소스 주석을 기반으로 API 문서 생성
- jdb: Java 디버거
- javap: 바이트코드 디스어셈블러
- jconsole, jvisualvm: 런타임 모니터링·프로파일링 도구
- Additional Libraries & Headers
- 네이티브 코드(Native) 연동을 위한 jni.h 헤더 등
'Back-End > Java' 카테고리의 다른 글
[JAVA][계산기 만들기-5] Lv3. Generics를 활용한 계산기 만들기 (2) | 2025.04.23 |
---|---|
[JAVA][계산기 만들기-4] Lv3. Enum을 활용한 계산기 만들기 (0) | 2025.04.22 |
[JAVA][계산기 만들기-3] Lv2. 클래스를 사용하여 객체 지향 개념을 적용한 계산기 만들기 (0) | 2025.04.22 |
[JAVA][계산기 만들기-1] github 라벨 편집, Issue Template 생성, PR Template 생성 (1) | 2025.04.18 |
[JAVA] OOP란? - 객체 지향 프로그래밍의 개념과 특징 (1) | 2025.04.16 |