🦅Swift Syntax

#2. 자바 데이터 타입, 변수 그리고 배열 [자바]

msi 2021. 4. 15. 01:18
  1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  2. 프리미티브 타입과 레퍼런스 타입
  3. 리터럴
  4. 변수 선언 및 초기화하는 방법
  5. 변수의 스코프와 라이프타임
  6. 타입 변환, 캐스팅 그리고 타입 프로모션
  7. 1차 및 2차 배열 선언하기
  8. 타입 추론, 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으로 인식한다.