핵심개념
- 변수의 기본타입 : 자바에서는 모든 변수에 타입을 정의하고 있다. 변수가 가지는 타입에 따라 변수에 저장할 수 있는 값의 종류와 허용 범위가 달라진다.
- 정수 타입 : 소수점이 없는 정수를 저장할 수 있는 타입. (1bit : 0 또는 1을 표현할 수 있는 단위)
타입 |
메모리 사용크기 |
저장되는 값의 허용범위 |
byte |
1byte |
8bit |
-128~127 |
short |
2byte |
16bit |
-32,768~32,767 |
char |
2byte |
16bit |
0~65535(유니코드) -> 음수값을 가질 수 없음 |
int |
4byte |
32bit |
-2,147,483,648~2,147,483,647 |
long |
8byte |
64bit |
-9,223,372,036,854,775,808~9,223,372,036,854,775,807 ->값이 int형 범위를 넘어서면 반드시 뒤에 L이나 l을 붙여 long타입임을 알려주어야 한다. |
- 리터럴(literal): 소스코드에서 프로그래머에 의해 직접 입력된 값
ex) int a1 = 10; -> 여기서 10이 리터럴
진수 |
표현방법 |
값 |
10진수 변환 값 |
2진수 |
0b 또는 0B로 시작, 0과 1로 구성 |
0b1011 |
(2^3)*1 + (2^2)*0 + (2^1)*1 + (2^0)*1 = 8+2+1 = 11 |
8진수 |
0으로 시작, 0~7로 구성 |
0206 |
(8^2)*2 + (8^1)*0 + (8^0)*6 = 128 + 0 + 6 = 134 |
10진수 |
소수점 없는 0~9로 구성 |
365 |
365 |
16진수 |
0x 또는 0X로 시작, 0~9 또는 ABCDEF 또는 abcdef로 구성 (알파벳도 하나의 수로 인식. a:10,b:11,c:12,d:13,e:14,f:15) |
0xB3 |
(16^1)*11 + (16^0)*3 = 176 + 3 = 179 |
public static void main(String[] args) { int var1 = 0b1011; int var2 = 0206; int var3 = 365; int var4 = 0xB3;
System.out.println(var1); System.out.println(var2); System.out.println(var3); System.out.println(var4); } 실행결과 :
|
- char타입 : 하나의 문자를 저장할 수 있는 타입. 문자리터럴은 '로 감싼 것으로 유니코드로 변환되어 저장된다. 또한 char는 정수 타입이므로 10진수 또는 16진수 형태의 유니코드를 저장 가능하다.
ex) 'a','가'
ex) char var1 = 'A' //유니코드 : 65
ex) char b = 0x0041 / char c = 65;
public static void main(String[] args) { char c1 = 'A'; //문자를 직접 저장 char c2 = 65; //10진수로 저장, char 타입에 음수는 안됨. System.out.println(c1); System.out.println(c2);
char c4 = '가'; //문자를 직접 저장 char c5 = 44032; //십진수로 저장 System.out.println(c4); System.out.println(c5); } 실행결과 :
|
- 문자열 : "로 감싼 문자들. 문자열은 char타입에는 저장할 수 없음. String 타입은 기본타입이 아니고 클래스 타입이다.
public static void main(String[] args) { //char var1 = "A"; "A"가 문자열로 인식되어 에러발생 String var2 = "A"; String name = "김땡땡"; String job = "간호사";
System.out.println(var2); System.out.println(name); System.out.println(job); } 실행결과 :
|
- 이스케이프문자 : 문자열 내부에 \는 이스케이프 문자를 뜻하며 이스케이프 문자를 사용하면 특정 문자를 포함시키거나, 문자열의 출력을 제어할 수 있다.
이스케이프 문자 |
출력 용도 |
\t |
탭만큼 띄움 |
\n |
줄바꿈(유닉스, 윈도우) |
\r |
줄바꿈(맥, 윈도우) |
\" |
"출력 |
\' |
'출력 |
\\ |
\출력 |
\u16진수 |
16진수 유니코드에 해당하는 문자 출력 |
public static void main(String[] args) { System.out.println("번호\t이름\t직업"); System.out.print("행 단위 출력1"); System.out.print("행 단위 출력2\n"); System.out.print("행 단위 출력3\r"); System.out.println("우리는\"개발자\"입니다."); System.out.println("봄\\여름\\가을\\겨울");}
실행결과 :
번호 이름 직업 행 단위 출력1행 단위 출력2 행 단위 출력3 우리는"개발자"입니다. 봄\여름\가을\겨울
|
- 실수타입 : 소수점이 있는 실수 리터럴을 저장할 수 있는 타입.
타입 |
메모리 사용크기 |
정밀도(소수점 이하 자리) |
float |
4byte |
32bit |
7자리 |
double |
8byte |
64bit |
15자리 (자바는 실수리터럴을 기본적으로 double 타입으로 해석하기 때문에 double 타입변수에 저장을 해야한다. float 타입에 저장하고 싶다면 리터럴 뒤에 f 또는F를 붙여야 컴파일 에러가 발생하지 않는다. |
-> 알파벳 소문자e 또는대문자 E가 포함되어 있는 숫자 리터럴은 지수와 가수로 표현된 소수점이 있는 10진수 실수로 인식한다.
ex) 5e2 : 5.0 * 10^2 = 500.0
0.12E-2 : 0.12 * 10^-2 = 0.0012
public static void main(String[] args) { //float var1 = 3.14; 기본적으로 실수는 double타입으로 인식 float var2 = 3.14f; double var3 = 3.14; System.out.println(var2); System.out.println(var3);
//int var4 = 3e6; 실수로 취급됨으로 에러발생 double var5 = 3e6; float var6 = 3e6F; double var7 = 2e-3; System.out.println("var5:"+var5); System.out.println("var6:"+var6); System.out.println("var7:"+var7);
}
실행결과 :
3.143.14
var5:3000000.0 var6:3000000.0 var7:0.002
|
- 논리타입 : 참과 거짓을 의미하는 논리 리터럴로 true와 false를 저장할 수 있다. 조건의 결과가 참이냐 거짓이냐에 따라 실행을 다르게 한다. 논리리터럴의 자료형은 1byte 크기의 boolean을 사용한다.
public static void main(String[] args) { boolean stop = true; if(stop) { System.out.println("중지합니다."); }else { System.out.println("시작합니다."); } } 실행결과 : 중지합니다.
|