본문 바로가기
JAVA

JAVA 변수/자동형변환/강제형변환/캐스팅/프로모션

by 자바비터 2022. 2. 6.

변수란 무엇인가?

    

  • 변수란 값을 저장할 수 있는 메모리 공간으로 프로그램은 변수를 통해 메모리 공간에 값을 저장하고 읽을 수 있다.

  

변수 선언

  

  • 변수에 어떤 타입의 데이터를 저장할지 그리고 변수 이름이 무엇인지 결정하는 것
int age; //변수 선언
age = 26; //age 변수에 값 저장

    

  • 변수는 변수 선언이 아닌 최초의 값이 저장될 때 변수가 생성된다.(초기화)
  • 변수 사용 범위 : 변수는 자신이 선언된 위치에서 자신이 속한 블록 내부까지만 사용이 가능하고 밖에서는 사용할 수 없다.

  

변수 선언 시 사용되는 기본(primitive) 자료형 데이터타입

    

타입 타입 메모리 할당 크기 저장되는 값의 허용 범위
byte 정수형 1byte -128 ~ 127
short 정수형 2byte -32,768 ~ 32,767
char 문자형 2byte 0 ~ 65535 (유니코드)
int 정수형 4byte -2,147,483,648 ~ 2,147,483,647
long 정수형 8byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
float 실수형 4byte (소수점) 7자리 이하
double 실수형  8byte (소수점) 15자리 이하
boolean 논리형 1byte true & false

  

변수의 명명규칙

  

  1. 영어 대소문자가 구분되며 길이 제한이 없다.
  2. 예약어를 사용하면 안된다.
  3. 숫자로 시작하면 안된다.
  4. 특수문자는 '_' 와 '$'만 사용 가능하다.
  5. 여러 단어를 섞어서 이름을 만들 때 두번째 단어부터 첫글자는 대문자로 한다. ex)userName
  6. 이름 사이에 공백문자를 포함할 수 없다.

  

자동형변환(프로모션)

  

  • 자동형변환이란 말 그대로 자동으로 타입 변환이 일어나는 것을 의미하며, 자동형변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생한다.

     작은 허용 범위 타입 = 큰 허용 범위 타입

 

      byte < short/char < int < long < float < double

          

package testt;

import java.util.Scanner;

public class blogTest {
	public static void main(String[] args) {
		byte byteValue = 10;
		int intValue = byteValue; 
		//컴파일시 자동 타입 변환이 되어 byte형 변수가 int형으로 변환되어 대입된다.
		//따라서 int변수가 아닌 다른 타입변수를 대입했는데도 오류가 나지 않음.
		System.out.println(intValue);
		
		long longValue = 25;
		//25는 int타입. 25가 long타입으로 자동 변환되어 long타입으로 저장된다.
		
		System.out.println(longValue);
		
		double doubleValue = 3.14 * 100;
		//실수 연산을 하기 위해 100이 100.0으로 자동형변환되어 계산 된다.
		//다른 피연산자 3.14가 실수이기 때문에
		
		System.out.println(doubleValue);
	}
}

  

실행 결과 화면

   

강제형변환(캐스팅)

   

  • 강제형변환이란 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 저장하는 것을 말한다.
  • 개발자가 필요하여 강제로 타입 변환을 지시한다. (()안에 변환할 타입 지정)
  • 강제 변환은 값이 손실될 우려가 있다.

      작은 허용 범위 타입 = 큰 허용 범위 타입

   

package testt;

import java.util.Scanner;

public class blogTest {
	public static void main(String[] args) {
		int intValue = 10;
		byte byteValue = (byte)intValue;
		//큰 허용 범위 타입 앞에 (작은 허용범위타입)을 적어 강제 타입 변환을 시킬 수 있다.
		
		System.out.println(byteValue);
		
		intValue = 65;
		char charValue = (char)intValue;
		System.out.println(charValue);
		//int형 65가 char타입으로 변환되면서 유니코드로 변환되어 "A"가 출력된다.
		
		double doubleValue = 1.9;
		intValue = (int)doubleValue;
		System.out.println(intValue);
		//강제 타입 변환으로 소수점 이하 0.9 손실이 발생한다.
	}
}

   

실행 결과 화면

 

 

 

 

 

댓글