Deperecated/JAVA

JAVA 기본서 공부 -3 <상수>

누알라리 2019. 12. 19. 16:42

1. 상수(= 리터럴)의 저장

  • 상수는 "자료형을 기반"으로 저장된다.
  • 하지만 자바의 상수 저장방식은 기본적으로 "고정"되어 있다.
상수 타입 저장 방식
정수 int
실수 double

 

2. 접미사

  • 자바는 상수의 자료형 검사에 매우 엄격하다.
  • 상수의 크기(데이터)를 기준으로 자료형을 결정짓지 않고, 정수형은 무조건 int, 실수형은 무조건 double로 표현하기 때문에, 그 이 외의 다른 자료형으로 표기하려면 접미사를 붙여야 한다.
class Hyunndy
{
	pubilc static void main(String[] arm)
    {
        long num1 = 1000000000; // 컴파일 불가
        int num2 = 1000000000; // 컴파일 불가
        long num3 = 10000000000L; // 컴파일 가능
        
        1000000000은 int형의 표현 범위를 넘어서는 숫자 이다.
        그래서 long에 할당하려고보니, 값이 너무 크다고 에러가 난다.
        왜?
        
        "JAVA는 상수의 자료형 검사에 엄격하다"
        정수형 상수는 무.조.건 int형으로 표현된다.
        따라서 우선적으로 이 숫자가 int형에 표현이 가능한지 판단한다.
        
        따라서, int형으로 표현안되는 숫자는 long형으로 표현해달라고 "명시적"으로 표현해야한다.
        
        long num3 = 1000000000L;
        
        뒤의 접미사 L은 이 상수를 long형 데이터로 표현해달라는 말이다.
    
    	double num1 = 18.75; // 컴파일 가능
        float num2 = 18.75; // 컴파일 불가
        float num3 = 18.75F; // 컴파일 가능
        
    	실수형 상수는 무조건 double로 표현된다.
        float num2 = 18.75; 가 오류가 나는 이유는
        자바 컴파일러는 값의 표현에 사용되는 바이트 크기를 기준으로 판단하기 때문에,
        4바이트는 8바이트보다 모자라다는 뜻이다.
        
        따라서, float형으로 표현해달라고 "명시적"으로 표현해야한다.
        
        float num3 = 18.75F;
    }
}

 3. 자료형의 변환이 의미하는 것은?

  • " 1과 1.0은 컴퓨터의 입장에서는 다른 수다. "
  • 왜? 데이터를 구성하는 비트열이 다르기 때문에!
데이터 비트 열
int 형 데이터 1 00000000 00000000 00000000 000001010
double 형 데이터 1.0 00111111 10000000 00000000 00000000

 

  • 이렇게 다르기 때문에, 컴퓨터의 입장에서는 1과 1.0은 다른 수 이다.

 

4. 자료 형의 변환

  • 형 변환이란 값의 표현 방식(비트 열)을 바꾸는 것이다.
  • JAVA에서 형 변환은 두 종류가 있다.
  1. 연산의 대상이 되는 두 피연산자의 자료형이 일치하지 않아서 자동으로 발생하는 형 변환
  2. 명시적으로 형 변환 연산자를 이용해 발생시키는 형 변환

5. 자동 형 변환

  • CPU는 하나의 연산에 사용되는 두 피연산자의 자료형이 다를 경우, 연산을 진행하지 못하도록 설계되어 있다.
  • 왜? 컴퓨터는 2진수로 표현되니까!
  • 따라서, "1 더하기 1.0" 같은 연산을 할 경우, 표현법을 하나로 통일시킨 다음에 계산을 해야한다.
  •  
  • "데이터의 손실"이 발생하지 않거나, 발생하더라도 경미한 경우에만 자동 형 변환을 허용하기 때문에,
  • 다음의 자동 형 변환 규칙을 사용한다.
JAVA의 자동 형 변환 규칙

byte -> short ->
		   int   ->    long   ->   float   ->   double
        char  ->
        
     long이 8바이트고, float이 4바이트인데 long에서 float으로 자동 형 변환이 되는 이유는,
     JAVA의 자동 형 변환 규칙이 바이트 크기가 아닌, "값의 표현 범위"를 기준으로 정의되었기 때문.

6. 명시적 형 변환

자동 형 변환 규착에 위배 되는 상황에서도 "명시적 형 변환"이 이뤄지도록 할 수 있다.

class Hyunndy
{
	public static void main(String[] args)
    {
    	char ch1 = 'A';
        char cg2 = 'Z';
        
        int num1 = ch1;
        int num2 = (int)ch2;
    }
}

'Deperecated > JAVA' 카테고리의 다른 글

JAVA관련 토막 지식.  (0) 2019.12.19
JAVA 기본서 공부 - 4 <연산자>  (0) 2019.12.19
JAVA 기본서 공부 -2 <변수&자료형>  (0) 2019.12.19
Java 기본서 공부 - 1 <자바 개발환경>  (0) 2019.12.15
Java와 C++의 차이점.  (0) 2019.12.15