seaking110 님의 블로그
JAVA란? 본문
Java 언어
- 어디서나 마시는 커피처럼 어디서나 동작 가능한 (JVM)
- 1990년대 발표
- C언어 기능 + 공통 실행 환경, 클래스, 객체
java 언어의 특징
- 플랫폼 독립성 : 공통 실행환경이 있어 여러 기기에서 실행 가능
- 객체 지향 언어 (OPP) : 코드를 이해하기 쉽고 유지 보수가 쉽다.
- 주요 OPP 개념
- 상속 (Inheritance)
- 다형성 (Polymorphism)
- 캡슐화 (Encapsulation)
- 추상화 (Abstraction)
- 주요 OPP 개념
- 뛰어난 보안성 : 안정성이 높고 보안상 안전합니다
- 변환기 (Compiler)가 먼저 오류를 체크
- 지원하는 보안 기술이 많다.
- 그로인해 조금 무겁다.
- 멀티 스레드 지원 : 대규모 앱 개발 가능
- 풍부한 표준 라이브러리 ( API) : 다양한 개발 도구와 라이브러리 사용 가능
1. JVM (Java Virtual Machine)
- 정의 : java virtual machine의 약자로 자바 프로그램이 동작할 수 있는 가상의 기기를 만들어주는 역할
- 역할: 여러 운영체제 및 기기에서 자바 프로그램을 실행할 수 있는 환경을 제공합니다.
- 자바 애플리케이션은 소스 코드가 컴파일된 바이트 코드(클래스 파일) 형태로 실행됩니다.
- JVM은 이 바이트 코드를 읽고 운영체제가 이해할 수 있는 기계어로 변환하여 실행합니다.
2. 바이트 코드 (Bytecode)
- 정의: 자바 소스 파일(.java)을 Java 컴파일러에 의해 변환한 코드로, .class 파일로 저장됩니다.
- 특징:
- 운영체제나 하드웨어에 종속되지 않는 중간 코드.
- JVM이 이해할 수 있는 코드 형식.
- 플랫폼 독립성을 제공하는 핵심 요소 중 하나.
3. Java 컴파일러(Java Compiler)
- 역할: 자바 소스 파일(.java)을 바이트 코드(.class)로 변환.
- 컴파일 후 생성된 .class 파일은 JVM에 의해 실행됩니다.
- 특징:
- 프로그램 실행 전에 컴파일 과정을 거쳐 오류를 미리 확인할 수 있음.
4. 인터프리터(Interpreter)
- 역할 : 운영체제가 읽은 바이트 코드 (class 파일)를 기계가 실행할 수있는 기계어로 변경
5. JIT 컴파일러(Just-In-Time Compiler)
- 역할 : 인터프리터의 효율을 높혀준다
6. 메모리 영역
- 메모리 영역 : Java 데이터를 저장하는 영역, JVM이 할당받은 메모리 영역
- Stack 영역 : 기본형 변수의 원본 값 , 참조형 변수의 주소 값
- stack은 정적으로 할당된 메모리 영역
- Heap 영역 : 참조형 변수의 원본 값
- heap은 동적으로 할당된 메모리 영역
- Stack 영역 : 기본형 변수의 원본 값 , 참조형 변수의 주소 값
7. 클래스 로더(Class Loader)
- 역할 : 바이트 코드(class 파일)를 메모리 영역에 로드하는 운반기
8. 가비지 컬렉터(Garbage Collector)
- 역할 : Java에서 메모리 영역에서 안쓰는 데이터를 주기적으로 지우는 역할
- 메모리를 효율적으로 관리하며 수동으로 관리하지 않아도 된다.

동작 과정
- Java 소스 파일을 자바 컴파일러가 바이트 코드 (.class)로 변경
- class Loader가 JVM 영역으로 가져온 뒤
- Java Interpreter과 JIT Compiler가 바이트 코드를 기계가 이해할 수 있게 해석을 한다
- Runtime 시스템인 실행되는 시스템으로 이관한다.
JRE ( JAVA Runtime Environment)
- 정의 : 자바 프로그램을 실행하기 위한 환경
- 역할 : JRE 는 라이브러리와 JVM을 포함
특징
- JRE는 .class 파일만 실행 가능
JDK (JAVA Development kit)
- JRE 및 JVM을 모두 포함
- JDK가 javac 명령을 통해 .java파일을 .class 파일로 변환
- 디버깅 기능 포함
wrapper class
- Wrapper Class 래퍼클래스 : 기본형 변수를 클래스로 한번 랩핑한 변수
- 클래스로 변수를 관리할 시 객체지향의 많은 기능 등을 사용 가능하다!
|
기본 타입
|
래퍼 클래스
|
|
byte
|
Byte
|
|
short
|
Short
|
|
int
|
Integer
|
|
long
|
Long
|
|
float
|
Float
|
|
double
|
Double
|
|
char
|
Character
|
|
boolean
|
Boolean
|
아스키 코드
- A = 65
- a = 97
형변환
- 작은 타입에서 큰타입으로 형 변환 시
- 자동으로 형변환 되며 값의 손실 x
- 큰 타입에서 작은타입으로 형 변환 시
- 값의 손실이 생길 수 있음
- 개발자가 선택
'Today I Learned' 카테고리의 다른 글
| 객체지향 프로그래밍 이란? (1) | 2025.01.02 |
|---|---|
| 컬랙션이란? (0) | 2025.01.02 |
| 온보딩 프로젝트를 마치며 (0) | 2024.12.30 |
| 241227 TIL (DFS를 이용한 중복 순열, 순열, 조합구하기) (1) | 2024.12.27 |
| 241226 TIL (0) | 2024.12.26 |