
자료형의 기본 구조는 위와 같다.
크게 기본 자료형과 참조 자료형으로 나뉘는데, 참조 자료형의 경우 객체 개념에 대한 이해가 선행되어야 하므로 여기서는 우선 '기본 자료형'과 문자/문자열의 구분을 위한 'String'만 다룬다.
System.out.println("===문자형===");
//문자형, 크기 : 2byte, 표현범위 : 0~65,535
char c1 = 'A'; //내부적으로 아스키코드값 65
System.out.println("c1 = " + c1);
char c2 = 65; //A에 해당하는 아스키코드값 65를 직접 대입
System.out.println("c2 = " + c2);
char c3 = '\u0041'; //A를 유니코드로 표현
System.out.println("c3 = " + c3);
char c4 = '자';
System.out.println("c4 = " + c4);
char c5 = '\uc790'; //자를 유니코드로 표현
System.out.println("c5 = " + c5);
System.out.println("===정수형===");
//byte, 크기 : 1byte, 표현범위 : -128~127
byte b1= 127;
System.out.println("b1 = " + b1);
//short, 크기 : 2byte, 표헌범위 : -32,768~32.767
short s1 = 32767;
System.out.println("s1 = " + s1);
//int, 크기 : 4byte, 표현범위 : -2,147,483,648~2,147,483,647
int in1 = 1234567;
System.out.println("in1 = " + in1);
System.out.println(23); //long, 크기 : 8byte, 표현범위 : 20억 대 이상
long lo1 = 1234567L;
System.out.println("lo1 = " + lo1);
정수형의 기본은 int로 long lo1 = 1234567;라고 명시할 경우, 1234567은 int의 범위에 들어가기에 처음엔 int로 인식하나, long 자료형이기 때문에 long 데이터로 lo1 변수에 최종 대입한다.
long lo1 = 1234567L; System.out.println("===실수형===");
//float, 크기 : 4byte
float f1 = 9.2f;
System.out.println("f1 = " + f1);
//double, 크기 : 8byte
double d1 = 9.8;
System.out.println("d1 = " + d1);
실수형의 기본은 dobule이며 그 이유는 double이 소수점 자리를 표현하는 정밀도가 더욱 높기 때문이다.
float f1 = 9.2F; System.out.println("===문자열 표시===");
//문자열 표시(기본 자료형이 아님, 참조 자료형)
String str = "Hello World";
System.out.println("str = " + str);
1) String의 s는 대문자로 명시해야 한다.
특수 문자를 출력하고 싶을 때 사용하며 '\ (역슬래시)'를 붙인다.
package kr.s02.variable;
public class VariableTypeMain02 {
public static void main(String[] args) {
//확장 특수 출력 문자(escape sequence)
char single = '\'';
System.out.println(single);
String str = "오늘은 \"수요일\" 입니다.";
System.out.println(str);
//문자열에 '를 표시하면 자동으로 일반문자로 변환됨
String str2 = "내일은 '목요일' 입니다.";
System.out.println(str2);
String str3 = "C:\\javaWork";
System.out.println(str3);
String str4 = "여기는 서울이고\n저기는 부산입니다.";
System.out.println(str4);
String str5 = "이름\t나이\t취미";
System.out.println(str5);
}
}
출력)
'
오늘은 "수요일" 입니다.
내일은 '목요일' 입니다.
C:\javaWork
여기는 서울이고
저기는 부산입니다.
이름 나이 취미
1) String str2 = "내일은 '목요일' 입니다."
큰 따옴표 안 작은 따옴표의 경우 자동으로 일반 문자로 바뀐다.
2) \t : \t 다음 문자열을 한 칸 띄워 출력한다.
3) \n : \n 뒤의 문자열을 다음 라인에 출력한다.

연산 시 원칙은 자료형이 같아야 한다는 것이다.
하지만 이를 고수할 경우 연산에 제한이 발생한다.
그래서 만든 것이 '형변환'이다.
package kr.s03.cast;
public class CastMain01 {
public static void main(String[] args) {
System.out.println("===묵시적 형변환(자동 형변환)===");
//더 큰 자료형으로 승격이 일어나는 형태, 정보의 손실이 전혀
//없으며 자동적으로 발생
byte b1 = 127;
byte b2 = 127;
//byte result = b1+b2;
int result = b1+b2;//32bit 미만의 자료형 즉,
//byte형 데이터들을 연산하면 32bit로 승격
System.out.println("result = " + result);
short s1 = 32767;
short s2 = 32767;
//short result = s1 + s2;
int result2 = s1 + s2;//32bit 미만의 자료형 즉,
//short형 데이터들을 연산하면 32bit로 승격
System.out.println("result2 = " + result2);
int in2 = 1234;
long lg2 = 2345L;
//in2: int -> long 자동 형변환
long result3 = in2 + lg2;
System.out.println("result3 = " + result3);
int in3 = 25;
double db = 10.5;
//in3: int => double 자동 형변환
double result4 = in3 + db;//25.0 + 10.5
System.out.println("result4 = " + result4);
}
}
1) 표현 범위가 좁은 곳에서 넓은 곳으로 갈 때 발생한다.
2) 문제는 정수와 실수, 이때는 정수보다 실수가 큰 범위이므로 정수 → 실수 표현 시 묵시적 형변환이 발생한다.
ex.
int in3 = 25;
double db = 10.5;
double result4 = in3 + db;//25.0 + 10.5
package kr.s03.cast;
public class CastMain02 {
public static void main(String[] args) {
System.out.println("===명시적 형변환(강제 형변환)===");
//더 작은 자료형으로 강등이 일어나는 형태, 정보의 손실이 발생할 수 있음.
byte b1 = 127;
byte b2 = 127;
//int result = b1 + b2; 원래는 이렇게 하겠지만
byte result = (byte)(b1 + b2);//자동적으로 int로 형변환된 것을
//byte로 강제 형변환, 이때 (byte)를 캐스트 연산자라고 함.
//이때 (b1+b2)처럼 소괄호를 해주지 않으면 b1만 형변환 함.
System.out.println("result = " + result);
short s1 = 32767;
short s2 = 32767;
//int result2 = s1 + s2; 원래는 이렇게 하겠지만
short result2 = (short)(s1 + s2);//자동적으로 int로 형변환된 것을
//short로 강제 형변환
System.out.println("result2 = " + result2);
int in1 = 100;
long lg1 = 200L;
//lg1 : long -> int 강제 형변환
int result3 = in1 + (int)lg1;
System.out.println("result3 = " + result3);
//int가 300을 충분히 담을 수 있기 때문에 왜곡 X
int in2 = 26;
float ft = 10.3f;
//ft : float -> int 강제 형변환
int result4 = in2 + (int)ft;
System.out.println("result4 = " + result4);
//int는 정수만 담을 수 있으므로 0.3이 절삭되어 정보 왜곡 O
}
}
1) 표현 범위가 넓은 곳에서 좁은 곳으로 갈 때 발생한다.
2) 단, 이때 데이터의 손실이나 값의 왜곡이 발생하기도 한다.
3) 정수에서 실수로 자동 형변환하는 것과 달리, 실수 -> 정수 표현 시 캐스트 연산자를 활용해 강제로 형변환을 해주어야 한다.
ex.
int in2 = 26;
float ft = 10.3f;
int result4 = in2 + (int)ft;
→ (int)와 같이 소괄호 안에 자료형을 명시한 것을 '캐스트 연산자'라고 한다.