Java

[Java] 데이터 타입, 변수, 상수, 리터럴

ruming 2021. 10. 16. 18:33

기본 데이터 타입 (8개)

 

특징

- 기본 타입의 크기가 정해져 있음 (CPU나 운영체제에 따라 변하지 않음)

 

boolean

- 1비트, true or false

 

char

- 2바이트

- Unicode

 

byte

- 1바이트 (-128~127)

 

short

- 2바이트 (-32768~32767)

 

int

- 4바이트 (-2³¹ ~ 2³¹ -1)

- JDK8부터 양수(0 ~ 2³² -1)로도 사용가능

 

long

- 8바이트 (-2⁶³ ~ 2⁶³ -1)

 

float

- 4바이트 (-3.4E38~3.4E38)

 

double

8바이트 (-1.7E308~1.7E308)

 

 

레퍼런스 타입 (1개)

 

용도

- 배열

- 클래스

- 인터페이스

 


문자열

- 기본 타입이 아님

- String 클래스로 문자열 표현

 

문자열 리터럴

- 이중 인용부호로 묶어 표현

- String 객체로 자동 처리

String name = "amy"

문자열 연결

System.out.println("이름 : "+name)    // "이름 : amy"으로 출력됨.

 

 

변수

- 프로그램 실행 중에 값을 임시 저장하기 위한 공간

- 데이터 타입에서 정한 크기의 메모리 할당

 

변수 선언

inr radius;
char c1, c2, c3;

 

변수 선언과 초기화

int radius = 10;
char c1 = 'a', c2 = 'b', c3 = 'c';
double weight = 75.56;

 

변수 읽기와 저장

radius = 10 * 5;
c1 = 'r';
weight = weight + 5.0;

 

var 키워드를 사용해 변수 타입 생략
C++의 auto 키워드
- 지역 변수의 선언에만 사용
- 컴파일러가 변수 타입 추론

var price = 200;
var name = "kitae";
var pi = 3.14;
var point = new Point();    //Point타입
var v = new Vector<Integer>();    //Vector<Integer>타입

- 변수 선언문에 반드시 초깃값 지정
var name;    //컴파일 오류, 타입 추론 불가능

 

상수

- final 키워드 사용

- 선언 시 초기값 지정

- 실행 중 값 변경 불가

final double PI = 3.141592;

 

리터럴과 정수 리터럴

리터럴

- 프로그램에서 직접 표현한 값

 

정수 리터럴

10진수, 8진수, 16진수, 2진수

int n = 15;     //15 -> 10진수 리터럴 15    
int m = 015;    //015 -> 0으로 시작하면 8진수. 십진수로 13
int k = 0x15;    //0x15 -> 0x로 시작하면 16진수. 십진수로 21
int b = 0b0101;    //0b0101 -> 0b로 시작하면 2진수. 십진수로 5

int 형으로 컴파일

long타입 리터럴은 숫자 뒤에 L또는 l을 붙임

long g = 24L;

 

 

실수 리터럴

- 소수점 형태나 지수 형태로 표현한 실수

12. 12.0 .1234 0.1234 1234E-4

 

- 실수 타입 리터럴은 double 타입으로 컴파일

double d = 0.1234; double
e = 1234E-4; // 1234E-4 = 1234x10-4이므로 0.1234와 동일

 

- 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 함

float f = 0.1234f;
double w = .1234D; // .1234D와 .1234는 동일

 

 

※참고
숫자 리터럴의 아무 위치에나 언더스코어(_) 허용 (가독성 높임)
컴파일러는 _를 빼고 처리함.
int price = 20_100;
long cardNumber = 1234____5678_1357_9998L;
long maxLong = 0x7fff_ffff_ffff_ffffL;

허용되지 않는 경우 
- 리터럴 끝에 사용x
- 소수점 앞뒤에 사용x
- L(F)앞에 사용x
- 0x 중간이나 끝에 사용x
=> 숫자 사이에만 허용됨

 

 

문자 리터럴

- 싱글 쿼터로 문자 표현

'w', 'A', '가', '*', '3', '글', \u0041

- \u 다음에 4자리 16진수(2바이트의 유니코드)

char a = 'A';
char b = '글';
char c = \u0041; // 문자 'A'의 유니코드 값(0041) 사용
char d = \uae00; // 문자 '글'의 유니코드 값(ae00) 사용

- 특수문자 리터럴은 백슬래시(\)로 시작

종류 의미 종류 의미
\b 백스페이스 \r 캐리지 리턴
\t \" 이중 인용부호
\n 라인피드 \' 단일 인용부호
\f 폼피드 \\ 백슬래시

 

 

논리 리터럴과 boolean 타입

- 논리 리터럴 : true, false (2개)

- boolean 타입 변수에 치환하거나 조건문에 이용

boolean a = true;
boolean b = 10 > 0;    // 10>0가 참이므로 b 값은 true
boolean c = 1;     // 타입 불일치 오류. C/C++와 달리 자바에서 1,0을 참, 거짓으로 사용 불가
while(true) {     // 무한 루프. while(1)로 사용하면 안 됨
...
}

1과 0을 사용할 수 없다는 것에 주의하자.

 

 

null 리터럴

- 레퍼런스에 대입해 사용

int n = null;    // 기본 타입에 사용 불가
String str = null;