카테고리 없음

Java 2장-2 변수란 ?

박대신 코딩공부 2021. 10. 22. 23:04

1. 변수의 타입

변수를 선언할 때는 저장하려는 값의 특성을 고려하여 가장 알맞은 자료형을 변수의 타입을 선택한다.

자료형은 크게 '기본형'과 '참조형' 두 가지로 나눌 수 있는데 자바는 C언어와 달리 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수이다.

 

1. 기본형

기본형은 크게 논리형, 문자형, 정수형, 실수형, 4가지로 구분되며 실제값(data)을 저장한다.

 

2. 참조형

참조형 변수는 어떤 값이 저장되어 있는 주소(memory address)를 값으로 갖는다.

8개의 기본형을 제외한 나머지 타입

 

3. 상수

변수의 타입 앞에 'final'을 붙인 상수는 반드시 선언과 동시에 초기화해야 하며 이름은 모두 대문자로 하여야 한다.

여러 단어로 이루어져 있는 경우 '_'로 구분한다.

그리고 상수는 반드시 선언과 동시에 초기화 해야하며 상수의 값은 변경이 허용되지 않는다.

final int MAX_VALUE = 100;

 

4. 리터럴

어떤 값을 넣을때 사용되는 값, 위에서 100 과 같은 것이다. 

float 형 리터럴의 끝에는 F,f 를 붙여서 표시하고 double 형은 D,d long형을 L,l을 붙인다.

boolean 타입의 리터를은 true 와 false 두 개 밖에 없다.

long count = 10000L;
float f1 = 2.3F;
double d1 = 5.6D;

2. 형변환

형변환이란 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다.

프로그램에서 값의 대입이나 연산을 수행할 때는 같은 타입끼리만 가능하다. 그래서 연산을 수행하기 전에 같은 타입으로 만들어야 하는데, 변수나 상수를 다른 타입으로 변환하는 것을 '형변환(casting)' 이라고 한다.

      double d = 85.4;
      int score = (int)d; // double타입의 변수 d를 int 타입으로 형변환

      System.out.println(d); // 85.4
      System.out.println(score); // 85

 

기본형에서 boolean 을 제외한 나머지 타입들은 서로 형변환이 가능하다.

기본형과 참조형간의 형변환은 불가능하다.

작은 데이터 타입에서 큰 데이터 타입으로 형변환이 되는 자동 형변환과

큰 데이터 타입에서 작은 데이터 타입으로 형변환이 되는 강제 형변환 두가지가 있다.

 

1. 자동 형변환

예를 들어 작은 그릇인 byte(1 byte)를 가장 큰 그릇인 double(8 byte)로 데이터를 옮기면 손실 없이 그대로 보존된다.

//정말 손실이 없는지??

 

왼쪽에서 오른쪽으로의 변환은 자동 형변환이 일어나며 반대 방향으로의 변환은 반드시 강제 형변환을 해주어야 한다.

 

       int i = 100;
       char c = 'a';
       
       int j = c;      // char 타입에서 int 타입으로 자동 변환.
       double d = i;   // int 타입에서 double 타입으로 자동 변환. 
                
       System.out.println(j);  // j의 값 : 97
       System.out.println(d);  // d의 값 : 100.0

 

2. 강제 형변환

예를 들어 가장 큰 그릇인 double(8 byte)를 작은 그릇인 byte(1 byte)로 데이터를 옮기면 손실이 일어날수도 있다.

그러므로 강제 형변환시 주의해서 형변환해야 한다.

 

        //int -> byte 강제 형변환(값이 작을 경우)
        int i = 10;
        byte b = (byte)i; 	//강제 형변환을 하지 않으면 에러 발생.
        System.out.println("i의 값 :"+i+" b의 값:"+b);  // i의 값 :10, b의 값:10
        
        
        
        //int -> byte 강제 형변환(값이 큰 경우)
        int j = 1000;
        byte c = (byte)j; //강제 형변환을 하지 않으면 에러 발생.
        System.out.println("j의 값 :"+j+" c의 값:"+c);  // i의 값 :1000, b의 값:-24

 

 

byte의 값의 범위에 있는 10의 값을 넣었을 경우 손실없으나, byte의 값의 범위를 넘는 경우 손실이 발생하여 예상하지 못한 값이 나온것을 볼 수 있다.

 

 

 

 

 

이전 글 

2021.10.22 - [분류 전체보기] - Java 2장-1 변수란 ?

 

다음 글 

2021.10.24 - [분류 전체보기] - Java 3장 연산자란??