dohun.log

[Java] 02.변수와 타입 본문

Study/Java

[Java] 02.변수와 타입

dohun31 2021. 12. 20. 12:15

변수

변수는 값을 저장할 수 있는 메모리 공간을 의미한다.

이렇게 말하면 너무 딱딱하니까 쉽게 말하면 데이터를 담을 수 있는 박스다.

 

그렇다고 박스에 아무거나 막 담을 수 있을까? 아니다😂

(약 타입 언어에서는 가능하지만 강 타입 언어에서는 절대 안 된다.)

타입

박스에 무엇을 담을 수 있는지 알려주는 이름표 같은 것이다.

 

타입의 종류

종류 타입 메모리 사용 크기
정수 byte 1 byte / 8 bit
정수 char 2 byte / 16 bit
정수 short 2 byte / 16 bit
정수 int 4 byte / 32 bit
정수 long 8 byte / 64 bit
실수 float 4 byte / 32 bit
실수 double 8 byte / 64 bit
논리 boolean 1 byte / 8 bit

변수의 선언

Java에서 변수 선언은 다음과 같이 한다.

타입	변수이름;
int	age;
double	height;
boolean	isStudent;

 

변수의 초기화

 

변수를 초기화하려면 다음과 같이 선언을 하고 초기화하는 방법이 있고,

int age; // 변수 선언
age = 21; // 변수 초기화

선언과 동시에 초기화하는 방법이 있다.

int age = 21; // 변수 선언 + 초기화

 

변숫값 읽기

 

변수를 초기화했다면 이제 변수를 읽을 수 있다.

int age = 21;
int koreanAge = age - 1; // koreanAge는 20으로 초기화된다.

만약 초기화하지 않고 변수를 읽으려고 한다면 컴파일 에러가 난다.

int age;
int koreanAge = age - 1; // age값이 초기화되지 않았기때문에 컴파일 에러🚫

 

변수의 사용 범위

 

변수는 선언된 블록 내에서만 사용 가능하다.

 

다음과 같이 변수가 선언되어 있다면 컴파일 에러가 발생한다.

public class Dohun {
    public static void main(String[] args) {
        int age = 21;
        if(age > 21) {
            boolean isStudent = true;
        }
        // isStudent는 if문 안에서만 사용 가능
        // 여기서 사용하려고 하면 컴파일 에러🚫
        System.out.println(age + " " + isStudent);
    }
}

 

ageisStudent를 같이 print 하고 싶다면 다음과 같이 코드를 작성하면 된다.

public class Dohun {
    public static void main(String[] args) {
        int age = 21;
        boolean isStudent = false;
        if(age >= 21) {
            isStudent = true;
        }
        // age와 isStudent가 같은 블럭안에 선언되어 있다.
        // 사용 가능
        System.out.println(age + " " + isStudent);
    }
}

 

타입 변환

타입 변환이란 말 그대로 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.

 

자동 타입 변환

 

작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 자동적으로 발생한다.

byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환

 

이때 byte1byte이고 int4byte이다.

 

intValue의 최하위 1byte에 byteValue값을 넣어주면 된다.

intValue      
00000000 00000000 00000000 00000000
intValue     byteValue
00000000 00000000 00000000 00001010

int가 4byte이기 때문에 byteValue에 3byte를 더해주기만 하면 된다. 

데이터의 손실 없이 변환할 수 있다.

 

강제 타입 변환

 

큰 크기를 가지는 타입이 작은 크기를 가지는 타입에 저장될 때 발생한다.

이때는 자동 타입 변환과 같이 자동적으로 형 변환이 되지 않는다.

 

앞에서는 작은 크기를 큰 크기로 바꾸는것이기 때문에 데이터 손실 걱정 없이 형 변환을 할 수 있었지만 

이 경우에 큰 크기를 작은 크기로 바꾸면서 데이터가 버려지기 때문에 변환될 타입의 최솟값과 최댓값을 벗어나는지 확인한 다음 변환을 진행해야 한다.

 

int intValue = 10;
byte byteValue = (byte)intValue; // 강제 타입 변환

이 경우는

intValue      
00000000 00000000 00000000 00001010

intValue의 상위 3byte를 버리면 된다.

byteValue
00001010

이때 데이터는 그대로 보존 되지만

 

다음과 같은 경우에는 데이터가 보존되지 않는다.

int intValue = 103029770;
byte byteValue = (byte)intValue; // 강제 타입 변환
intValue      
00000110 00100100 00011100 00001010

이 경우에 상위 3byte를 버리면

intValue(상위 3byte)    
00000110 00100100 00011100

원래의 데이터가 버려진다.

 

그리고 byteValue는 10이 된다.

byteValue
00001010

원래의 의도와는 다른 결과가 나오는 것이다.

 

따라서 강제 타입 변환을 할 때는 변환될 타입의 반드시 최솟값과 최댓값을 확인해야 한다.

 

 

출처: 이것이 자바다 Chater02 변수와 타입

'Study > Java' 카테고리의 다른 글

[Java]05.참조 타입  (2) 2022.01.18
[Java]01.자바 시작하기  (1) 2022.01.11
[Java]04.조건문과 반복문  (0) 2022.01.11
[Java]03.연산자  (0) 2022.01.10
[Java]06.클래스-확인문제  (0) 2021.12.29
Comments