2. 변수와 기본 자료형

Isaiah IM·2022년 12월 27일
0

java basic

목록 보기
3/38
post-thumbnail

1. 변수

변수란 데이터를 저장하기 위한 공간이며, 정확히 말하면 데이터를 저장하기 위해 할당된 메모리(정확히는 RAM에 할당된 메모리)를 의미한다.

이때, 변수에는 이름을 붙일 수 있으며, 이를 변수명이라고 한다.
또한, 변수는 정수, 실수, 문자등 특정한 데이터의 종류를 저장하기 위한 타입이 존재하며, 이를 자료형이라고 한다.


2. 자료형

JAVA의 자료형은 다음과 같이 구성되 있다.

자료형데이터크기저장 가능 범위
boolean참, 거짓1 bytetrue, false
char문자2 byteunicode 문자
byte정수1 byte-128 ~ 127
short정수2 byte-32,768 ~ 32,767
int정수4 byte-2,147,483,648 ~ 2,147,483,647 (약 ±21억)
long정수8 byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (약 ±920경)
float실수4 byte±(1.4E-45 ~ 3.4E38)
double실수8 byte±(4.94E-324 ~ 1.79E308)

이때, Ex는

10x10^x

를 의미한다.


3. 변수의 선언

변수 선언 방법

JAVA에서 변수의 선언은 다음과 같이 할 수 있다.

자료형 변수이름;

예를 들어 char자료형으로 ch 라는 이름으로 변수를 만들고 싶다면 다음과 같이 변수를 선언할 수 있다.

char ch;

이 자료형에는 만자 하나를 담을 수 있으며, 예를 들어 변수에 "P"라는 문자를 저장하고 싶을때는 다음과 같이 할 수 있다.

ch='P';

변수 선언 규칙

변수 선언에도 사용이 불가능한 이름이 있다.
먼저, 변수의 이름은 숫자로 시작할 수 없다. 예를 들어

int first_data;// 사용 가능
int data1;// 사용 가능
int 1data;// 사용 불가

와 같이 first_data의 경우는 변수로 사용이 가능한 이름이나, 1data, 1_data와 같이 숫자로 시작하는 이름은 변수로 사용이 불가능하다.
또한 $_를 제외한 특수문자 역시 변수로 사용이 불가능하다.
또한, 대소문자가 구분된다.
예를들어 변수 이름 firstFirst는 다른 변수이다.

또한, if, continue, true, else와 같이 java 문법에서 사용하는 명령어인 예약어 역시 변수명으로 사용할 수 없다.

또한, long자료형에 값을 대입하려면 long data=100L;과 같이 대문자 혹은 소문자로 L을 끝에 적어야 하며, 실수를 표현하는 자료형의 경우 float data=2.3f;와 같이 뒤에 다문자 혹은 소문자 F를 적어야 한다.
이에 대해서는 다음장에서 자세히 다룰 예정이니 지금은 참고 정도만 해두자.


3. short 와 byte 사용시 주의점

앞에서 short자료형과 byte자료형 역시 정수 영역을 저장함을 볼 수 있었다.
그렇다면 이 코드를 한번 해석해 보도록 하자.

public class ByteTest {
	public static void main(String[] args) {
		byte a, b, c;// 변수 선언
		a=10;// a=10 대입
		b=20;// b=20 대입
		
		c=a+b;// a+b 연산
		
		System.out.println(c);// 결과 출력
		
	}
}

byte 자료형으로 변수 a, b, c를 선언하고, a=10, b=20을 대입한 후, 이 둘을 더하는 간단한 연산이다.
코드를 실행시켰을 때 console에 10과 20을 더한 30이 출력되리라 예상할 것이다.
그러나, 실행 결과를 보면 다음과 같다.
output:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Type mismatch: cannot convert from int to byte

놀랍게도 예상했던 결과가 아닌 Type mismatch 라는 오류가 출력됨을 알 수 있다.

이와 같이 오류가 발생하는 이유는 java 내부에서는 정수형 데이터를 연산할 때 int 지료형으로 변환후 연산하기 때문이다.
즉, 우리가 short혹은 byte자료형으로 변수를 선언해도 결국 java 내부에서는 연산시 int자료형으로 변환을 하게 된다.

이를 코드로 나타내면 다음과 같다.

public class ByteTest {
	public static void main(String[] args) {
		int a, b;// 변수 선언
        byte c;// 변수 선언
		a=10;// a=10 대입
		b=20;// b=20 대입
		
		c=a+b;// a+b 연산
		
		System.out.println(c);// 결과 출력
		
	}
}

코드를 보면 ab는 연산을 위해 int로 선언됬으나, c의 경우 여전히 byte자료형이기 때문에 자료형의 크기가 달라서 오류가 발생하는 것이다. 이러한 오류를 Type mismatch오류라고 한다.
즉, 우리는 정상적으로 byte자료형을 이용해 코드를 작성했으나, java 내부에서 형변환을 자동적으로 하면서 발생하는 문제이다.

그러나, long 자료형으로 코드를 작성한 경우에는 연산시 int자료형으로 변환시 long자료형이 int자료형보다 표현할 수 있는 정수의 범위가 넓어 데이터의 손실이 발생할 수 있기 때문에 long자료형으로 작성한 경우, 연산시 long으로 연산이 된다.


4. 실습

  • Q1.

    변수에 1.54와 25.1652를 저장후, 두 수의 합과 차, 곱을 구하시오.

  • Q2.

    변수에 10과 23를 저장후, 두 수의 곱을 구하시오.

  • Q3.

    short형 변수에 10과 23를 저장후, 두 수의 합과 차, 곱을 구하시오.


  • A1.

public class Q1 {
	public static void main(String[] args) {
		float a, b;
		float sum, sub, mul;// 합, 차, 곱
        
		a=1.54f;
		b=25.1652f;
		
		sum=a+b;
		sub=a-b;
		mul=a*b;
		
		System.out.println("a+b: "+sum);
		System.out.println("a-b: "+sub);
		System.out.println("a*b: "+mul);
		
	}
}

result:

a+b: 26.7052
a-b: -23.625198
a*b: 38.754406
  • A2.

public class Q2 {
	public static void main(String[] args) {
		int a, b;
		int mul;// 곱
		
		a=10;
		b=23;
		
		mul=a*b;

		System.out.println("a*b: "+mul);	
	}
}

result:

a*b: 230
  • A3.

public class Q3 {
	public static void main(String[] args) {
		short a, b;
		int sum, sub, mul;// 곱
		
		a=10;
		b=23;
		
		sum=a+b;
		sub=a-b;
		mul=a*b;
		
		System.out.println("a+b: "+sum);
		System.out.println("a-b: "+sub);
		System.out.println("a*b: "+mul);	
	}
}

result:

a+b: 33
a-b: -13
a*b: 230

위 주소에서 code를 다운로드 받아 eclipse로 직접 정답 확인이 가능하다.
https://github.com/isaiahIM/java_basic/tree/main/variable%20and%20data%20type

profile
나는 생각한다. 고로 나는 코딩한다.

0개의 댓글