우리가 사용하는 상수는 고정된 값으로, 내가 직접적으로 적는 데이터이자 변하지 않는 값이다.
반대로 우리가 코딩을 하며 사용할 변수는 값을 저장하는 공간으로, 변하는 값을 가진다.
int num1 = 1;
float num2 = 3.5f;
char A = 'A';
String B = "ABC";
기본적으로 자료형 변수명 = 값;의 형태로 사용하게 되며,
자료형은 숫자: 정수 실수 / 문자: 단일문자 문자열로 구분해 사용한다.
정수 자료형
정수 : integer → int, byte, short, long
byte=1byte, short=2byte(65,025), int=4byte(16,581,375), long=8byte
1byte는 8bit(0000 0000 ~ 1111 1111) → 256 → -128~127의 값을 구현할 수 있다.
byte와 short은 비교적 적은 수를 담을 수 있어 한계가 크고, long은 8byte만큼의 용량을 모두 사용하기 때문에
최적화를 위해 일반적으로 정수의 자료형은 4byte의 크기를 가지는 int를 가장 많이 사용한다.
오버 플로우와 언더 플로우
정수 자료형을 사용할 때에는 해당 자료형의 데이터 저장 공간을 고려해야 한다
예를 들어, -128부터 127의 값을 저장할 수 있는 1byte크기의 byte에 그 이상의 값을 넣게 되면 '오버 플로우'가 발생하고
그 이하의 값을 넣게되면 '언더 플로우'가 발생해 에러가 발생하게 된다.
byte min = -150;
byte max = 380;
System.out.print(min); // underflow, error
System.out.print(max); // overflow, error
실수 자료형
실수 : float, double
float=4byte, double=8byte
float num1 = 1.1f;
double num2 = 1.1;
실수 자료형 float은 f를 꼭 함께 적어주어야 한다.
두 가지 자료형 중 8byte의 크기를 가지는 double이 소수점을 더 세밀하게 나타내주어 주로 double을 많이 사용한다.
문자 자료형
단일 문자 : character → char = 2byte
문자열 : String
char A = 'A';
char B = 65;
String C = "ABC";
2byte의 크기를 가지는 단일 문자 자료형 char는 작은 따옴표 ' ' 와 함께 사용하고
문자열 자료형 String은 큰 따옴표 " " 와 함께 사용한다.
char B = 65; 처럼 따옴표 없이 작성하게 되면 프로그램은 아스키 코드 값 'A'를 출력하게 된다.
논리 자료형
논리 자료형 boolean // True일 때는 1의 값을, False일 때는 0의 값을 가진다.
boolean func = 1 != 0;
System.out.println(func); // true이므로 1의 값을 출력한다.
묵시적 형 변환(자동 타입 변환)과 명시적 형 변환(강제 타입 변환)
묵시적 형 변환(자동 타입 변환) : 자료형은 저장 공간이 작은 타입에서 큰 타입으로의 변환이 가능하다.
반대로 저장 공간이 큰 타입에서 작은 타입으로는 변환이 불가능하다.
* byte < int < float < double
ex) byte -> int (O) / int -> byte (X)
int num1 = 5;
float num2 = num1; // 정수형을 실수형으로 변환
System.out.println(num2); // 5.0이 출력된다
//
int num1 = 100;
float num2 = 5.5f;
int result;
result = num1 + num2 ; // 105.5
System.out.print(result); // 결과값은 실수인데 result의 자료형은 int이므로 오류가 발생한다.
명시적 형 변환(강제 타입 변환) : 강제로 자료형을 넣어 타입을 변환하는 방식이다.
float num1 = 5.5f;
int num2 = (int)num1;
System.out.println(num2); // 5가 출력된다.
'JAVA' 카테고리의 다른 글
[JAVA] 객체 생성 : new 연산자 (0) | 2023.02.24 |
---|---|
[JAVA] 연산자와 전후위연산 (0) | 2023.02.24 |
[JAVA] 출력문 함수 System.out.println / print / printf (0) | 2023.02.23 |
10진법과 2진법, 8진법, 16진법 (0) | 2023.02.21 |
프로그래밍 언어란? (0) | 2023.02.20 |