변수는 컴퓨터 내부의 메모리 공간에 저장된다.
ex) int level = 10;
→ 4바이트(int형) 크기의 메모리 공간 이름(변수이름)은 level이고, 이 공간에 값 10을 넣는다.
자바의 자료형
1. 기본 자료형
2. 참조 자료형
자바 라이브러리에서 기본으로 제공하는 자료형으로, 얼마만큼의 메모리를 어떻게 사용할지 미리 정해져 있음!
정수형 | 문자형 | 실수형 | 논리형 | |
---|---|---|---|---|
1바이트 | byte | - | - | boolean |
2바이트 | short | char | - | - |
4바이트 | int | - | float | - |
8바이트 | long | - | double | - |
자료형 | 바이트 크기 | 수의 범위 |
---|---|---|
byte | 1 | ~ |
short | 2 | ~ |
ing | 4 | ~ |
long | 8 | ~ |
// 정수 자료형
// byte형
byte a = 1;
// short형
short b = 2;
// int형
int c = 3;
// long형
long d = 4L; // 또는 1l;
// 서로 다른 자료형의 정수끼리 더한 경우
// 정수 값 연산할 때 4바이트를 기본 단위로 사용하므로 int형으로 저장됨
System.out.println(a+b);
어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값으로 정하자고 약속함!
ex) 아스키 코드 → A의 아스키 코드 값은 65
인코딩
: 문자를 정해진 코드 값으로 변환하는 것
디코딩
: 코드 값을 다시 문자로 변환하는 것
문자(char)와 문자열(String)
문자는 작은따옴표('') 사용하고, 문자열은 큰따옴표("") 사용함!
문자열은 기본 자료형으로 표현할 수 없고, 문자열 끝에는 항상 널 문자(\0)가 있음
// 문자형
char ch1 = 'A';
System.out.println(ch1); // A
System.out.println((int)ch1); // 65
char ch2 = 66;
System.out.println(ch2); // B
int ch3 = 67;
System.out.println(ch3); // 67
System.out.println((char) ch3); // C
char ch1 = '한';
char ch2 = '\uD55c'; // 유니코드 값 사용
System.out.println(ch1); // 한
System.out.println(ch2); // 한
// 문자형 변수에 숫자 저장하기
int a = 65;
int b = -66;
char a2 = 65;
// char b2 = -66; // 문자형 변수에 음수 넣으면 오류 발생!
System.out.println((char)a); // A
System.out.println((char)b); // ? // 음수 값을 char형으로 출력하면 알 수 없는 문자라는 의미로 ? 출력
System.out.println(a2); // A
float형
: 부호 1비트+지수부 8비트+가수부 23비트 = 총 32비트(4바이트)
double형
: 부호 1비트+지수부 11비트+가수부 52비트 = 총 64비트(8바이트)
→ 자바에서는 double형이 기본으로 사용됨!
double dnum = 3.14;
float fnum = 3.14F; // float임으로 표시하기 위해 F나 f 붙여줌
System.out.println(dnum); // 3.14
System.out.println(fnum); // 3.14
변수의 참, 거짓의 값을 나타내는 데 사용됨
boolean isMarried = true;
System.out.println(isMarried); // true
자료형을 쓰지 않고 변수 사용 가능! → 지역 변수 자료형 추론
주의점!
1. 한 번 선언한 자료형 변수를 다른 자료형으로 사용 X
2. var로 자료형 없이 변수를 선언하는 방법은 '지역 변수'만 가능!
var i = 10; // int i = 10으로 컴파일됨
var j = 10.0; // double j = 10.0으로 컴파일됨
var str = "hello"; // String str = "hello"로 컴파일됨
System.out.println(i);
System.out.println(j);
System.out.println(str);
str = "test"; // 다른 문자열 대입은 가능
// str = 3; // String으로 이미 사용되었기 때문에 정수값 넣을 수 없음!
상수
: 항상 변하지 않는 값 → 자바에서 상수는 final
예약어 사용해서 선언
final int MAX_NUM = 100; // 선언과 동시에 초기화
final int MIN_NUM;
MIN_NUM = 0; // 사용하기 전에 초기화해야함!
System.out.println(MAX_NUM);
System.out.println(MIN_NUM);
// MAX_NUM = 1000; // error 발생
리터럴
: 프로그램에서 사용하는 모든 숫자, 문자, 논리값을 일컫는 말
즉, char ch = 'A';
int num = 10;
final double PI = 3.14;
에서 'A', 10, 3.14를 리터럴 혹은 리터럴 상수라고 함
서로 다른 자료형을 연산할 때 하나의 자료형으로 통일한 후 연산을 해야 함! 이때 형 변환이 이루어짐!
// 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환 자동으로 이루어짐
byte bNum = 10;
int iNum = bNum; // byte형 변수 bNum 값을 int형 변수 iNum에 대입
// 덜 정밀한 자료형에서 더 정밀한 자료형으로 대입하는 경우
int iNum2 = 20;
float fNum = iNum2; // float으로 자동 형 변환
// 연산 중 자동으로 변환되는 경우
double dNum = iNum + fNum; // double로 자동 형 변환
// 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우
// 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우
double dNum1 = 1.2;
float fNum2 = 0.9F;
int iNum3 = (int)dNum1 + (int)fNum2;
int iNum4 = (int)(dNum1+fNum2);
System.out.println(iNum3);
System.out.println(iNum4);