데이터 타입
자바에서 '데이터 타입'은 해당 데이터가 메모리에 어떻게 저장되고 프로그램에서
어떻게 처리되어야 하는지를 명시적으로 알려주는 것이다.
정수형 데이터 타입
- 정수형의 데이터 타입에 아래와 같이 4가지 유형이 있다.
- 자바에서 정수의 2진수 표현 방법은 "부호와 2의 보수" 표현방법을 사용합니다.
- 정수형은 10진수뿐만 아니ㄱ라 2진수, 8진수, 16진수 등의 형태도 표현할 수 있습니다.
- 정수형의 디폴트는 int이므로 long형을 지정하려면 할당할 숫자 뒤에 "L"을 붙여줍니다.
package day01;
public class DateType {
public static void main(String[] args) {
byte a = 127; // -128~127
short b = -32768; // -32768 ~ 32767
int c = 214467000; // -2147483648 ~ 2147483647
long d = 1231234567489L;
//2진수 = 0b
int f1 = 0b11;
//8진수 = 0
int f2 = 0110;
//16진수 = 0x
int f3 = 0x15;
System.out.println(f1);
System.out.println(f2);
System.out.println(f3);
실수형 데이터 타입
- 실수형에는 아래와 같이 2가지 유형이 있습니다.
- 과거 실수를 표현할 때는 float를 주로 사용했지만, 하드웨어 발달과 메모리공간 증대로 인해 double을 주로 사용한다.
- 실수형은 디폴트형이 double이므로 float형을 지정하려면 숫자 뒤에 "F"를 붙여줍니다.
- 실수형 표현은 소수점 표현방식인 10진수형 표현방식과, 지수 형식으로 나타내는 과학기술용 표기법이 사용됩니다.
※ 표기 한계 존재
- 메모리가 한정적이기 때문에 표현할 수 있는 수의 제한이 있다.
- float은 7자리 / double은 15자리 이기때문에 double의 신뢰성이 더 높다.
float g1 = 3.1415912F;
double g2 = 3.1415921122;
System.out.println(g1);
System.out.println(g2);
double g3 = 0.000314e4;
System.out.println(g3);
double g4 = 314.15e-2;
System.out.println(g4);
- e4 는 10의 4승을 뜻한다.
- e-2는 10의 -2승을 뜻한다.
논리형 데이터 타입
- 참(true) 또는거짓(false)의 값을 갖는 자료형을 논리형(불리언) 자료형이라고 한다.
- 논리형 값에는 true와 false가 있습니다.
- 논리형은 다른 데이터 타입과 서로 형 변환(type casting)할 수 없습니다.
- 또한 C언어에서처럼 숫자 값을 논리 값으로 해석하여, 0을 false로 다루고 0이 아닌 값을 true로 해석하는 것을 허용하지 않습니다.
- 논리형 데이터타입에서는 오직 true와 false만 허용합니다.
boolean c1 = true;
boolean c2 = false;
System.out.println(c1);
System.out.println(c2);
문자열 데이터 타입
char | 단일 문자 |
String | 문자열을 표현 |
- 단일 문자는 char형으로 표현합니다.
- char형은 0~ 2^16의 범위 내에서 부호가 없는 16비트(2byte) 숫자를 사용하여 유니코드 문자를 표현합니다.
- char형 값은 홑 따옴표 (' ')안에 넣어야 합니다.
- 문자열을 표현할 때는 String을 사용합니다.
- String은 기본 데이터형이 아닙니다. 문자열을 좀 더 쉽게 다루기 위해 만들어 놓은 클래스입니다.
- String 클래스는 문자열을 표현하는데 사용됩니다.
- 문자열 값은 겹 따옴표(" ")안에 넣습니다.
문자열 값에 숫자를 넣으면 ASCII 코드로 반환되어 출력된다.
※ ASCII코 : 크기를 2bytes로 늘리고, 65536개 글자에 숫자값을 지정
char d1= 'a';
char d2= 65;
char d3= 44032;
char d4= '가';
char d5= '\uAC00';
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);
System.out.println(d5);
- d2의 값은 ASCII 코드에 따라 "A"로 출력된다.
String s1 = "hello";
String s2 = "world";
System.out.println(s1+s2);
System.out.println(200+200);
System.out.println(200+"200");
System.out.println(200+200+"200");
형변환 (Type Casting)
- 데이터의 크기
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
1. 크기가 작은 타입을 큰 타입에 저장할 때는 자동으로 형변환(JVM)이 일어난다.
byte b = 10;
short s = b;
int i = b;
long l = b;
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);
결과 : 10
char c = '가';
int j = c; //char -> int로 자동변환
System.out.println(j);
int k = 1000;
double d = k; // int -> double
System.out.println(d);
2. 크기가 큰 타입을 작은 타입에 저장할 때는 (type) 캐스팅을 한다.
package day01;
public class Casting02 {
public static void main(String[] args) {
int i = 70;
byte b = (byte)i; // int -> byte 형변환
char c = (char)i; // int -> char 형변환
System.out.println("b : "+b);
System.out.println("C : "+c);
System.out.println();
float f = 3.14F;
int i1 = (int)f; // float -> int로 형변환
System.out.println("i1 : "+i1);
// 주의
// 형변환시 저장할 수 없는 범위가 들어오면 잘려나간 값이 저장됩니다.
int k = 1000;
byte b1 = (byte)k;
//예외적인 상황 char -> short 로 변경시에도 명시적으로 형변환 작업을 해야함
char cc = 'A';
short ss = (short)cc;
System.out.println(ss);
}
}
3. 연산이 일어났을 때의 형변환
- 서로 다른 타입의 연산의 결과는 큰 타입에 맞추어 자동 형변환이 일어납니다.
package day01;
public class Casting03 {
public static void main(String[] args) {
char c = 'B';
int i = 2;
char cc = (char)(c + i);
int ii = c + i;
System.out.println(cc);
System.out.println(ii);
}
}
- Int 형보다 작은 타입의 연산은 무조건 Int가 된다.
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
- ※ Int가 기준
- byte 혹은 short 간의 형변환시 int로
- int 혹은 상위 형들간의 형변환시는 무조건 큰 값으로 형변환된다고 생각하면 이해가 쉽다.
byte b1 = 100;
byte b2 = 3;
byte b3 = (byte)(b1+b2);
728x90
'Programming > Java' 카테고리의 다른 글
[JAVA] 배열과 입력 (2) | 2023.10.26 |
---|---|
[JAVA] 연산자 (0) | 2023.10.25 |
[JAVA] - 출력과 선언 규칙 (0) | 2023.10.25 |
JAVA 11 jdk 설치 방법 (0) | 2023.10.25 |
선택 정렬 알고리즘 (0) | 2020.10.20 |