[JAVA] 자료형( 기본,참조, ), 리터럴, 형변환
[ 기본 자료형 ]
: 자바 언어에서 기본적으로 제공해주는 자료형으로, C에서 유래된 자료형이다.
: 몇바이트를 쓸 것인지 정해져있다.
: java의 경우 숫자를 4byte단위로 구분한다.
ex) 정수형 : int, long, byte, short / 실수형 : double, float / 논리형 : boolean / 문자형 : char

각 기본 자료형은 표현할 수 있는 범위가 지정되어있으며, 해당 범위를 벗어나는 값을 변수에 담으면 에러를 발생시킨다.
Int는 -2,147,483,648 ~ 2,147,483,647 까지 표현할 수 있다.

[ 참조 자료형 ]
: 클래스 타입의 자료형
: JDK에서 제공되는 클래스이거나, 프로그래머가 정의하여 사용할 수 있음
: 클래스나 저장되는 값에 따라 할당되는 메모리가 달라진다.
ex ) String , Student같은 사용자가 생성한 클래스
[ 정수 자료형 ]
- 가장 일반적인 숫자 자료형
ex ) int, long, byte, short
[ 문자 자료형 ]
- 문자형은 문자세트에 정의된 숫자로 저장된다.
즉, ‘A’는 65bit값으로 전환(인코딩)하여 저장한다.
저장된 ‘A’를 출력하기 위해서는 저장된 65bit값을 가져와 원래의 문자열로 변환(디코딩 한다.
- 인코딩 : 각 문자에 따른 특정한 숫자값(코드값)을 부여하여 메모리에 저장하는 것
- 디코딩 : 숫자 값을 원래의 문자로 변환하는 것.
- 문자세트 : 문자를 저장 위한 코드 값 (숫자 값)을 정해놓은 세트
- 아스키(ASCII) : 1바이트로 영문자,숫자,특수문자 등을 표현 함
- 유니코드(Unicode) : 한글이나 한자처럼 1byte로 표현할 수 없는 타국의 언어를 표현하기 위한 표준 인코딩이다.
UTF-8, UTF-16이 대표적이다.
[ Example ]
char testChar = “A”;
system.out.println((int)testChar);
// -> 65 가 출력된다
int intChar = 66 ;
system.out.println((char)intChar);
// ->B가 출력된다.
char hangul = ‘\uAC00’ ; //unicode
system.out.println(hangul);
// -> '가' 가 출력된다.
[ 실수 자료형 ]
- 실수는 double자료형이 기본이며, float는 f, F같은 식별자를 반드시 사용한다.
3.14 같은 소수점은 8byte의 double로 저장된다.
하지만 3.14는. float로 저장할 수 없다.
3.14는 double형으로 저장되며, float는 4byte이기 때문에 3.14F를 붙여주면 저장할 수 있다.
double dNum = 3.14;
float fNum = 3.14F;
[ 논리자료형 ]
- boolean 형이며 true와 false만 저장할 수 있다.
- 초기값은 false이다.
[ 자료형 없이 변수 사용 ]
: jdk 10부터 지역변수에 한하여 변수에 대입되는 값을 보고 컴파일러가 자료형을 추론하여 변수를 사용하도록 지원하는 기능을 사용할 수 있다.다.
var testint = 10; // 10으로 저장됨
var testString = “testString” // 문자열이 출력됨
[ 상수 ]
- 상수(constant) : 변하지 않는 수
: 변수 앞에 final 키워드를 넣으면 사용할 수 있다.
이 값은 프로그램이 종료될때까지 변하지 않는다.
초기화 한 이후 값을 변경할 수 없다.
: 변하지 않는 값을 반복하여 사용할 때 주로 사용된다.
: 변경시에도 선언부만 수정이 필요하므로 여러 군데에서 사용될 경우 손쉽게 수정이 가능하다
[ 리터럴(literal) ]
-리터럴(literal) : 프로그램에서 사용되는 모든 숫자, 값, 논리값을 의미함.
: 리터럴은 상수 풀(pool)에 저장되어있다.
: 상수풀에 저장될 때 정수는 int로, 실수는 double로 저장된다.
: 정수의 범위를 초과하는 수는 L을 붙여 long타입으로 사용하고, 리터럴을 float형으로 사용하기 위해서
[ 형변환 ]
-서로 다른 자료형을 연산수행을 위해 하나의 자료형으로 통일하는 것
byte ➡️ shore / char ➡️ int ➡️ long ➡️ float ➡️ double
- byte크기가 작은 자료형에서 큰 자료형으로 형변환은 자동으로 진행된다.
(왼쪽에서 오른쪽으로의 형변환은 자동으로 진행된다. 반대의 경우 큰 자료형을 작은 자료형으로 캐스팅해주어야 한다. )
1) 묵시적 형변환 ( implicit tupe conversion )
: 작은 수에서 큰 수로 대입되는 것.
: 정방향으로 형변환이 일어나는 경우를 의미.
( 위 표에서 화살표 방향에 맞게 형변환 되는경우를 의미 )
byte bNum = 10 ;
int iNum = bNum;
float fNum = iNum;
double dNum = fNum + iNum ;
// 20 출력됨.
2) 명시적 형변환 ( explicit type conversion )
: 변환되는 자료형을 명시한다.
자료의 손실 발생위험 있다.
int a = 1000 ;
byte bNum = (byte) a ;
/* byte의 저장소가 작아 int의 값을 온전히 저장할 수 없으므로 형변환을 강제로 실행한다.
이 떄 일부 데이터가 byte형 변수에 저장되지 못하여 일부 데이터 유실이 발생할 수 있다.
이를 감안할 수 있는 경우 실행한다. */