- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
1. 데이터 크기에 따른 데이터의 표현 범위 이유
- 정수
1byte = 8bit
2^8개만큼 표현가능하다
그런데 -128 ~ 127만큼 표현하는 이유는
가장 왼쪽 비트(MSB(Most Significant Bit,최상위비트))가 1은 음수, 0은 양수를 의미해 7칸만 사용할 수 있기 때문이다.
부호가 없으면 0~255까지 표현가능하다.
- 실수
계산기를 만들면 오버플로우가 발생하기 때문에 BigDecimal을 사용한다.
부동 소수점 방식
float:
부호1 + 지수8 + 가수23 = 32비트
정규화를 통해 24까지 표현이 가능하다
10^7 < 2^24 < 10^8 정밀도는 7이다
double:
부호1 + 지수11비트 + 가수52비트 = 64비트
정밀도는 15이다
2. 프리미티브 타입과 레퍼런스 타입
참조 타입: 힙 메모리에 저장
기본 타입: 스레드 영역 중 스택 메모리에 저장
3. 리터럴이란?
고정된 값을 소스코드로 표현한 형태
정수리터럴
integer literal: l 0x 0b
floating point: f d 0.1f
character and String: \b \t \n \f \r \' \" \\
4. 변수 선언 및 초기화하는 방법
int a = 1;
을 컴파일해서 opcode를 까보면 한 줄이 아니고 두 줄이다.
int a 초기화 (bipush)
a = 1 값 할당(istore_1)
이게 멀티스레드 환경에서 오류가 발생하는 원인이다.
아래처럼 더블체크드 라킹이 필요하다.
public class App {
public static App getInstance(){
if App.app = null {
App.app = new App();
}
return app;
}
}
5. 변수의 스코프와 라이프타임
static은 클래스 로딩 시점에 생성되어 참조가 가능하고(클래스 변수)
instance는 생성 후에 참조가 가능해진다.(인스턴스 변수)
int num = 1_000_000;
이렇게 숫자를 표현할 수 있다.
System.out.println(num); 하면 그냥 1000000으로 인식한다.
'🦅Swift Syntax' 카테고리의 다른 글
#1-2. LLDB(Low-Level Debugger) 디버거 [스위프트] (0) | 2021.04.15 |
---|---|
#1-1. LLVM은 무엇이며 스위프트 코드는 어떻게 실행하는 것인가 [스위프트] (0) | 2021.04.14 |
#1. JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 [자바] (0) | 2021.04.14 |
어떻게 공부할 것인가?(학습방법) (0) | 2021.04.14 |