2024. 12. 13. 12:32ㆍ언어들/자바
Java 특징
- JVM 기반에서 작동하는 OOP언어
- 메모리 관리와 책임이슈를 구조적으로 제
- 컴파일러, 인터프리터 특징을 모두 가짐 - 하이브리드
- OS(Platform)에 대한 의존성 없음
- Big endian system 방식 사용 - 왼쪽 숫자가 큼, 100의자리 10자리 1의자리로 빅 엔디안으로 볼 수 있음
JIT 컴파일
자바는 바이트코드로 한번 컴파일 하는 과정과, 바이트코드를 인터프리터 하는 방식 2가지를 진행


https://velog.io/@kimunche/C1C2-Compiler-%EC%99%80-JIT-Compiler
JIT(Just-In-Time) 컴파일러는 자바에서 프로그램의 실행 시점에 바이트코드를 기계어로 변환하는 컴파일 기법입니다. 이는 자바의 성능을 향상시키기 위해 중요한 역할을 합니다. JIT 컴파일러는 다음과 같은 방식으로 작동합니다:
- 바이트코드 변환: 자바 코드는 먼저 바이트코드로 컴파일됩니다. 이 바이트코드는 플랫폼 독립적인 중간 코드로, JVM(Java Virtual Machine)에서 실행됩니다
- 최적화: JIT 컴파일러는 코드의 사용 패턴을 분석하여 최적화를 수행합니다. 예를 들어, 메서드 인라이닝, 데드 코드 제거, 루프 언롤링 등의 기법을 사용하여 실행 속도를 높이고 메모리 사용을 줄입니다
- 캐싱: 변환된 기계어 코드는 캐시에 저장되어, 동일한 코드가 반복적으로 실행될 때 재사용됩니다. 이는 매번 기계어로 변환할 필요를 줄여 성능을 더욱 개선합니다
- 컴파일 임계치: JIT 컴파일러는 특정 메서드가 자주 호출될 때 이를 기계어로 변환하기 시작하는데, 이때 사용하는 기준이 '컴파일 임계치'입니다. 이는 성능과 효율성을 고려하여 설정됩니다
JIT 컴파일러는 이러한 과정을 통해 자바 애플리케이션의 실행 속도를 크게 향상시킬 수 있으며, 특히 대규모 애플리케이션에서 그 효과가 두드러집니다.
AOT 컴파일

[네이버클라우드캠프] 2023.5.23 웹 프로그래밍(1) - 컴파일과 인터프리트(Hybrid, JIT, AOT)
컴파일과 인터프리트 (Hybrid, JIT, AOT) 컴파일 방식 C언어 코드가 리눅스OS 에서 실행되는 과정 1. C언어 코드 작성 C언어로 코드 작성. 일련의 명령문으로 구성되어 프로그램의 동작을 정의한다. 2.
tiny-stone.com
AOT (Ahead of Time) 컴파일은 프로그램을 실행하기 전에 미리 전체 소스 코드를 기계어로 컴파일하는 방식이다. AOT 컴파일은 프로그램을 실행하는 동안 컴파일 단계를 거치지 않고 이미 컴파일된 기계어 코드를 직접 실행한다.
JIT VS AOT
특징 | JIT 컴파일러 | AOT 컴파일러 |
컴파일 시점 | 런타임 | 빌드 타임 |
성능 최적화 | 동적 최적화 가능 | 정적 최적화, 일관된 성능 |
시작 시간 | 상대적으로 느림 | 빠름 |
개발 편의성 | 높은 유연성 | 낮은 유연성 |
보안 및 난독화 | 상대적으로 낮음 | 높음 |
Java가 하이브리드 방식으로 동작하는 이유

하드웨어 수준 자료형
정수
- bit수에 따라 표현 범위 결정
데이터 타입크기
(바이트)최소값 최대값 signed char 1 -128 127 unsigned char 1 0 255 signed short 2 -32,768 32,767 unsigned short 2 0 65,535 signed int 4 -2,147,483,648 2,147,483,647 unsigned int 4 0 4,294,967,295 signed long 4
(또는 8)-2,147,483,648
(또는 -9,223,372,036,854,775,808)2,147,483,647
(또는 9,223,372,036,854,775,807)unsigned long 4
(또는 8)0 4,294,967,295
(또는 18,446,744,073,709,551,615)signed long long 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807 unsigned long long 8 0 18,446,744,073,709,551,615
- 부호 있는 정수 (signed): 가장 왼쪽 비트가 부호 비트로 사용되며 음수와 양수를 모두 표현할 수 있습니다.
- 부호 없는 정수 (unsigned): 모든 비트를 값 표현에 사용하므로 양수만을 표현할 수 있으며 최대값이 두 배로 증가합니다.
- 크기: 데이터 타입의 크기는 플랫폼에 따라 다를 수 있지만 일반적으로 위와 같은 크기를 가집니다. 특히 long 타입은 시스템에 따라 크기가 다를 수 있습니다(32비트 시스템에서는 보통 4바이트지만 64비트 시스템에서는 종종 8바이트)
- 2의 보수를 더하는 방식으로 뺼셈 구현
단정도와 배정도의 유효 자릿수(IEEE 754 기반 실수)
1. 단정도 부동소수점 (Single Precision)

- 구조: 32비트
- 부호 비트: 1비트
- 지수부: 8비트
- 가수부: 23비트
- 유효 자릿수:
- 단정도의 가수부는 23비트로 구성되어 있습니다. 그러나 IEEE 754 표준에서 정규화된 부동소수점은 항상 가수 앞에 숨겨진 '1'(암시적 비트)이 존재하므로, 실제로는 24비트의 정밀도를 가집니다.
- 이진수로 표현된 숫자를 십진수로 변환할 때, 유효 자릿수는 다음과 같이 계산됩니다:
=log10(224)계산 과정:
- 224=16,777,216
- log10(16,777,216)≈7.22
2. 배정도 부동소수점 (Double Precision)
- 구조: 64비트
- 부호 비트: 1비트
- 지수부: 11비트
- 가수부: 52비트
- 유효 자릿수:
- 배정도의 가수부는 52비트로 구성되어 있으며, 정규화된 형태에서 항상 가수 앞에 숨겨진 '1'(암시적 비트)이 존재하므로 실제로는 53비트의 정밀도를 가집니다.
- 이진수를 십진수로 변환할 때, 유효 자릿수는 다음과 같이 계산됩니다:
=log10(253)계산 과정:
- 253=9,007,199,254,740,992
- log10(9,007,199,254,740,992)≈15.95
요약
형식 | 가수부 비트 수 | 실제 정밀도 (숨겨진 비트 포함) | 유효 자릿수 계산식 | 결과 (십진 유효 자릿수) |
단정도 | 23비트 | 224 (24비트) | log10(224) | 약 7자리 |
배정도 | 52비트 | 253 (53비트) | log10(253) | 약 15자리 |
지수부가 모두 1인 경우
- 지수부가 모두 1(단정도: 11111111, 배정도: 11111111111)인 경우는 일반적인 숫자 표현이 아니며 특별한 값을 나타냅니다:
- 가수부가 모두 0: 무한대 (+∞, −∞)
- 가수부가 0이 아님: NaN (Not a Number)
3.14로 단정도 배정도 계산 예
단정도 부동소수점 (Single Precision) 변환
- 십진수를 이진수로 변환:
- 3.14를 이진수로 변환합니다. 이는 정수 부분과 소수 부분을 각각 이진수로 변환한 후 합치는 과정입니다.
- 정수 부분: 310=112
- 소수 부분: 0.1410는 반복적인 나눗셈을 통해 이진수로 변환됩니다.
- 정규화:
- 이진수 표현을 정규화합니다. 예를 들어, 11.00112는 1.10011×21로 정규화됩니다.
- 지수와 가수 결정:
- 지수는 127(바이어스) + 실제 지수로 계산됩니다.
- 가수는 정규화된 숫자의 소수점 이하 부분을 23비트로 표현합니다.
- 구조화 및 변환:
- 부호 비트(0), 지수부, 가수부를 결합하여 32비트의 단정도 부동소수점 형식으로 만듭니다.
배정도 부동소수점 (Double Precision) 변환
- 십진수를 이진수로 변환:
- 위와 같은 방법으로 3.14를 이진수로 변환합니다.
- 정규화:
- 정규화된 형태로 표현합니다.
- 지수와 가수 결정:
- 지수는 1023(바이어스) + 실제 지수로 계산됩니다.
- 가수는 정규화된 숫자의 소수점 이하 부분을 52비트로 표현합니다.
- 구조화 및 변환:
- 부호 비트(0), 지수부, 가수부를 결합하여 64비트의 배정도 부동소수점 형식으로 만듭니다.
https://whatisthenext.tistory.com/146
단정도(single precision), 배정도(double precision)이란?
부동소수점 개요 처음 C언어를 공부할 때 가장 어리둥절했던 부분이 이 부분인 듯 하다. 처음에는 왜 이걸 배우지? 라는 생각을 했지만 컴퓨터구조론에서 컴퓨터가 실수를 다루는 방식에 대해서
whatisthenext.tistory.com
단정도, 배정도 최대 최소값




자바 자료형
1. 기본형 (Primitive Type)
- 정의: 자바에서 기본적으로 제공하는 데이터 타입으로, 실제 값을 저장합니다.
- 특징:
- 메모리의 스택(Stack)에 저장됩니다.
- 비객체 타입으로, null 값을 가질 수 없습니다.
- 총 8가지 기본형이 존재합니다.
분류 | 타입 | 크기 | 기본값 | 범위 또는 값 |
논리형 | boolean | 1비트 | false | true, false |
문자형 | char | 2바이트 | '\u0000' | 0 ~ 65,535 (유니코드) |
정수형 | byte | 1바이트 | 0 | -128 ~ 127 |
short | 2바이트 | 0 | -32,768 ~ 32,767 | |
int | 4바이트 | 0 | -2,147,483,648 ~ 2,147,483,647 | |
long | 8바이트 | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수형 | float | 4바이트 | 0.0F | 약 3.4×10−38 ~ 3.4×1038 |
double | 8바이트 | 0.0 | 약 1.7×10−308 ~ 1.7×10308 |
2. 참조형 (Reference Type)
- 정의: 객체의 주소값을 저장하는 데이터 타입으로 기본형을 제외한 모든 타입입니다.
- 예시:
- 클래스(Class)
- 배열(Array)
- 열거(Enum)
- 인터페이스(Interface)
- 특징:
- 메모리의 힙(Heap)에 실제 데이터를 저장하고 변수는 스택(Stack)에 주소를 저장합니다.
- 초기값은 항상 null입니다.
3. 유도형 (Derived Type)
- 자바에서는 "유도형"이라는 용어 대신 파생 자료형(Derived Type) 또는 참조형 데이터 타입을 의미
- 정의: 기본 자료형(Primitive Type) 또는 다른 데이터 타입을 기반으로 만들어진 구조화된 데이터 타입입니다.
- 예시:
- 배열(Array)
- 문자열(String)
- 사용자 정의 클래스(Custom Class)
4. 무치형 (Void Type)
- 자바에서는 "무치형"이라는 용어는 사용되지 않지만, 함수나 메서드에서 반환값이 없음을 나타내는 void 의미.
- 특징:
- 반환값이 없는 메서드에서 사용됩니다.
- 반환값이 없는 메서드에서 사용됩니다.
public void printMessage() {
System.out.println("Hello!");
}
5. 함수형 (Functional Programming)
- 자바는 전통적으로 객체지향 언어였지만, 자바8부터 함수형 프로그래밍 요소를 도입했습니다.
- 정의: 함수 자체를 일급 객체로 다루며 상태 변경 없이 순수 함수를 사용하는 프로그래밍 패러다임입니다.
- 주요 특징:
- 람다 표현식(Lambda Expressions): 익명 함수를 간결히 표현
numbers.stream().map(n -> n * n).collect(Collectors.toList());
-
- 스트림 API(Stream API): 컬렉션 데이터를 함수형 스타일로 처리
List<Integer> filtered = list.stream()
.filter(n -> n > 10)
.collect(Collectors.toList());
- 함수형 프로그래밍은 코드의 가독성과 재사용성을 높이고 병렬 처리 및 오류 처리를 용이하게 합니다.
정리
용어 | 자바에서의 의미 |
기본형 | Primitive Type (8가지 기본 자료형) |
유도형 | Derived Type 또는 참조 자료형 (배열, 클래스 등) |
무치형 | Void (반환값이 없는 메서드) |
함수형 | Functional Programming (람다 표현식 등) |
인코딩
ASCII 코드 - 7비트 코드 체계
미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( /ˈæski/, 아스키)는 영문 알파벳을 사용하는 대표적인 문자 인코딩

전세계 언어를 커버하기 위해 unicode(16bit체계)탄생
Home
home.unicode.org
MS가 부상하면서 Multi byte character string mbcs라고 말하기 시작함. 한글은 cp949를 정리 함.
EUC-KR
인터넷 발전 utf-8 사용시작하면서 한글은 3byte로 적용
https://www.youtube.com/watch?v=6hvJr0-adtg
'언어들 > 자바' 카테고리의 다른 글
독하게 시작하는 JAVA part1-섹션 08 (0) | 2024.12.13 |
---|---|
독하게 시작하는 JAVA part1-섹션 07 (0) | 2024.12.13 |
독하게 시작하는 JAVA part1-섹션 05 (2) | 2024.12.12 |
독하게 시작하는 JAVA part1-섹션 04 (0) | 2024.12.12 |
독하게 시작하는 JAVA part1-섹션 03 (2) | 2024.12.12 |