[JAVA] 자료형과 형변환 /상수와 리터럴

GyeongEun Kim·2021년 6월 14일
0

자료형

자바 자료형 종류

  1. 기본 자료형 (자바 라이브러리에서 기본으로 제공)
  2. 참조 자료형

기본 자료형

  • 정수형 : byte, short, int, long

  • 문자형 : char (String은 기본 자료형이 아니다)

  • 실수형 : float, double

  • 논리형 : boolean

정수형

가장 많이 사용하는 정수형 자료형은 int이며 4byte이다. int로 표현할 수 있는 값의 범위는 -(2^31) ~ (2^31)-1이다.
byte, short, long은 각각 1byte, 2byte, 8byte이다.

long형은 자바에서 정수를 표현하는 가장 큰 자료형이다. long으로 변수를 선언할 때는 주의할 점이 있다.

int num1 = 12345678900; //오류
long num2 = 12345678900; //오류

위와 같이 코드를 작성하면 두줄 모두 오류가 난다. 첫번째줄에서 오류가 나는 이유는 int형이 표현 가능한 값의 범위를 벗어났기 때문이다. 그런데 같은 값을 long으로 표현해도 오류가 난다. 왜 그럴까?
자바는 모든 정수 값을 기본으로 int형으로 처리하기 때문이다. 따라서 이 경우에는 long형이라는 것을 알려주기 위해 다음과 같이 숫자 뒤에 L이나 l을 붙여주어야한다.

long num = 12345678900L;

물론 int형의 유효 범위 이내에 있는 값을 long으로 선언할때는 L을 붙이지 않아도 된다.

실수형

float형보다 double형을 쓸 때 실수를 좀 더 정밀하게 표현할 수 있다.
자바에서 실수를 표현할 때는 double이 기본으로 사용된다. 따라서 float형으로 실수를 표현하고 싶다면 실수뒤에 F또는 f를 붙여서 명시해야한다.

double num1 = 3.14;
float num2 = 3.14F;

참고

JAVA 10부터 변수 선언시 자료형을 명시하지 않아도 컴파일러가 스스로 자료형을 추론하여 선언해주는 문법이 추가되었다. (local variable type inference)

var num =10; 
var str = "Hello";

과 같은 코드를 컴파일러가

int num =10;
String str = "Hello";

라고 추론한다.

주의점 : 한번 선언한 자료형 변수를 다른 자료형으로 사용 불가 / 지역 변수에만 사용가능

형 변환

  • 형 변환이란 두가지 다른 자료형을 가진 변수를 하나의 자료형으로 통일하는 행위

형 변환 종류

  1. 묵시적 형 변환 (자동 형 변환)
  2. 명시적 형 변환 (강제 형 변환)

묵시적 형 변환

  • 크기가 작은 자료형에서 큰 자료형으로 통일하는 경우 (byte-> int)
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로 통일하는 경우
    (float->double)
int inum = 10;
double dnum = 20.0;
System.out.println(inum+dnum);
//30.0 

명시적 형 변환

묵시적 형 변환과 반대의 경우 -> 자료 손실이 발생할 수 있음
프로그래머가 변환할 자료형을 직접 써줘야함

int inum = 10;
double dnum = 20.0;
System.out.println(inum+(int)dnum);
//30

상수와 리터럴

상수(constant)란, 변수와 달리 변하지 않는 값이다. 자바에서는 상수를 final 예약어를 통해 선언한다. 상수는 값을 변경하려고 하면 에러가 난다.

final double PI = 3.14;
final int MAX_NUM = 100;
//주로 상수 이름은 대문자를 사용

리터럴(literal)/ 리터럴 상수란, 프로그램에서 사용하는 모든 숫자, 문자, 논리값(true, false)을 일컫는 말이다.

int num = 10;
char ch = 'A';
final double PI = 3.14;

여기에서 10,'A',3.14가 모두 리터럴이다. 리터럴은 프로그램 실행시 시스템에 같이 로딩되어 특정 메모리 공간인 상수 풀(constant pool)에 놓인다.

예를 들어 int num = 10;에서 10을 num에 대입하려면 10이라는 상수가 메모리 공간 어딘가에 존재해야 num에 복사를 해 줄 수 있다. 이 때 10이 바로 상수 풀에 존재하는 것이다.

profile
내가 보려고 쓰는 글

0개의 댓글