본문 바로가기

코딩공부/JAVA

[7] JAVA 변수

변수와 데이터 타입

변수 : 값이 변할 수 있는 문자

 

JAVA는 변수에 값을 할당할 때, 변수안에 어떠한 데이터 타입이 들어갈 수 있는지를 변수를 생성할 때 명확하게 지정해줘야 한다.

 

숫자(Number) 는 정확한 표현으로 데이터를 구분한다.

int - integer(정수) :  (자연수 + 0 + 음수) ... -3, -2, -1, 0, 1, 2, 3 ....    ( * 자연수 : 1 ,2 3, 4, 5 ... )

double - real number(실수) : ... -2.0, -1.0, 0, 1.0, 2.0 ...

 

▶ 왜 자바와 같은 몇몇 컴퓨터 언어들은 데이터 타입을 변수에 정의를 해줘야 되는가?

데이터를 넣을 때마다 변수의 데이터 타입에 따라서 넣을 수 없는 데이터가 있다면 불편하다.

그것은 "Trade-off"와 관련되어 있다.

 

예를 들어 보자

테이블에 다음과 같이 머그컵에 담긴 물과 뜯지 않은 음료수가 놓여있다.

머그컵에 담긴 물을 의심없이 마실 수 있을까? 뭐가 들었는지 알 수가 없기때문에 마실 수 있는 사람은 없을 것이다. 하지만, 오른쪽에 음료수는 뜯어져 있지 않다면, 안의 내용물을 의심없이 마실 수 있을 것이다. 

 

 

 

즉, 자바와 같은 컴퓨터 언어들의 변수는 이 오른쪽에 있는 음료수의 용기와 같은 것이다.

그래서 이 변수에는 반드시 "정수가 온다" 또는 "문자열이 온다"라고 정의를 해놓으면, 그 것이 아닌 정보가 들어갈 때 아예 자바가 컴파일이 되지 않는다. 따라서 변수에 값이 들어갔다면, 그 변수 안에 있는 값은 반드시 (선언한 데이터타입) 정수거나 문자열이라는 것을 확신할 수 있다. 그래서 "꺼낼 때마다 변수안의 값이 정수인지 문자인를 확인하지 않아도 된다"는 편리함을 제공한다. 

대신 값을 넣을 때 까다로울 수 있다.

 

public class Variable {

	public static void main(String[] args) {
		int a = 1; // Number -> integer  ... -2, -1 , 0, 1, 2 ...
        System.out.println(a);
         
        double b = 1.1; // real number -> double ... -2.0, -1.0, 0, 1.0, 2.0 ...
        System.out.println(b);
         
        String c = "Hello World";
        System.out.println(c);
        
	}
}

 

변수의 효용

이전에 문자열에 사용할 수 있는 replace() 함수를 이용해서 문자를 대체할 수 있었다.

대신해서 변수를 사용해보자

 

값만을 출력하지 않고, 변수를 사용해서 출력한다면, 변수명을 통해서 값에 대한 의미를 파악하기 쉽다.

VAT 라는 이름의 변수를 보고 "부가가치세의 세율"을 나타내는 것이구나를 알 수 있다.

 

public class Letter {

	public static void main(String[] args) {
		String name = "leezche";
        System.out.println("Hello, "+name+" ... "+name+" ... egoing ... bye");
         
        double VAT = 10.0; //변수명을 통해서 이 값이 무엇을 의미하는지 파악할 수 있다.
        System.out.println(VAT);

	}
}

 

데이터 타입의 변환 (casting)

데이터 타입을 다른 데이터 타입으로 컨버팅(converting, 변환)하는 방법

 

double b = 1; 

1은 정수지만 변수의 데이터타입이 double형 이므로 값이 저장될 때 자동으로 실수인 1.0으로 컴버팅되어 저장된다.

잃어버리는 값이 없다.

 

int c = 1.1; 

1.1은 실수인데 int형(정수) 변수에 담으려고 하면 error 가 발생한다. double형 데이터를 int형으로 변환할 수 없어서 발생하는 error이다.

why? double 형은 소수점이 있고, int 형은 소수점이 없기 때문에 자동으로 바꿔주면 소수점을 잃어버리는 현상이 생길 수 있기 때문이다.

 

 

빨간색 밑불위에 마우스 오버하면 이클립스가 에러를 알려주고, 취할 수 있는 조치방법을 알려준다.

 

'Change type of 'd' to 'double''을 클릭 > 즉, d라는 변수는 현재 int 형인데 그것을 double 형으로 바꾸겠다는 의미이다.

'Add cast to 'int''를 클릭  > 저장하려는 데이터는 1.1 로 double형인데 이 값을 int형으로 강제로 바꾸는 코드를 자동으로 추가한다. 

 

즉, 1.1을 강제로 정수로 바꾸면 소숫점 밑이 완전 사라지기 때문에 손실이 일어난다. 이런 손실이 일어날 수 있기 때문에 우리가 명시적으로 형변환 int라고 하기 전에는 자동으로 해주지 않는다.

정수형이 double형에 들어갈 수 있었던 것은 손실이 없기 때문에 자동으로 casting 해준 것이다. 

 

따라서 다음 두 코드는 같은 의미이다.

double b = 1;  //자동으로 데이터 타입 변환 Casting
double b2 = (double) 1; //명시적으로(수동으로) 데이터 타입 변환

 

 

숫자 1을 문자 1로 변환하고 싶다.

java int to string casting

getClass() : 변수가 가진 값이 어떠한 데이터 타입인지 알려준다.

public class Casting {

	public static void main(String[] args) {
		double a = 1.1; //실수형 
        double b = 1;  // 1은 정수지만 변수의 데이터타입이 double형 이므로 값이 저장될 때 자동으로 실수인 1.0으로 저장된다.
        double b2 = (double) 1; //1.0
         
        System.out.println(b);
         
//        int c = 1.1; //error
        double d = 1.1;
        int e = (int) 1.1;
        System.out.println(e); //1
         
        // 1 to String 
        String f = Integer.toString(1);
        System.out.println(f.getClass());
	}

}

 

'코딩공부 > JAVA' 카테고리의 다른 글

[9] 디버거  (0) 2019.10.17
[8] 프로그래밍 이란?  (0) 2019.10.17
[6] JAVA 문자열 다루기  (0) 2019.10.16
[5] JAVA 숫자와 연산  (0) 2019.10.16
[4] 데이터와 연산 - 숫자, 문자  (0) 2019.10.16