Java

Java 프로그래밍 기본 (변수,데이터 타입, 형변환)

Uisin 2024. 9. 4. 17:31

변수

 변수는 프로그램의 처리 과정에서 데이터를 담아둘 수 있는 메모리의 공간으로 한 마디로 물건을 넣는 박스와 같다. 프로그램에서 사용해야할 데이터를 저장하지 않으면 그 선언과 동시에 증발해버리기 때문에 꼭 어디엔가 저장을 해야 재사용이 가능해지는데 이 역할을 하는 것이 변수인 것이다.

 

변수 선언과 초기화

일단 변수를 사용하려면 기본적으로 선언을 해줘야 컴퓨터가 이를 알아먹고 제역할을 한다. 변수의 선언은 데이터가 담길 데이터타입 + 변수의 이름 그리고 종결어미인 세미콜론으로 이루어진다. 변수를 초기화 하는 것은 변수가 처음 가지는 값을 설정해주는 것이다.

int a; //int = 데이터타입 a = 변수명
int a= 1; //이렇게 하면 변수 선언과 초기화가 동시에 되는 것이다.

 

 여기서 중요한 점은 Java는 예약어를 변수명으로 사용하지 못하는 점, 변수명의 대소문자를 구분하기에 변수이름이 Apple이라면 apple로 재호출 할 수 없다는 점, 그리고 변수의 이름이 숫자로 시작하지 못하며 $와 _를 제외한 특수문자로 시작하는 변수명은 선언이 불가능 하다는 점이다.

 

 

 

데이터 타입

 변수를 선언할 때 적었던 int 와 같은 키워드가 바로 데이터 타입인데, 이는 문자와 숫자로 이루어진 데이터가 어떤 타입으로 저장되고 있는지를 분류하는 것이다. 데이터 타입에는 총 4종류로

  • 정수형 타입
  • 실수형 타입
  • 문자형 타입
  • 논리형 타입

등이 있다.

 

 

1. 정수형 타입

정수형 타입 데이터는 말 그대로 정수를 저장하고자 할 때 사용하는데 총 4가지의 종류가 있으며 각각의 종류는 담는 데이터의 크기별로 분류가 되어있다!

자료형 바이트 비트 저장 가능한 값의 범위
byte 1 8 -127 ~ 127 (2^8단계)
short 2 16 -32,768 ~ 32,767 (2^16 단계)
int 4 32 -2,147,483,648 ~ 2,147,483,647 (2^32단계)
long 8 64 -2^63 ~ 2^63-1
*여기서 byte는 ASCII코드 기준 표현할 수 있는 글자의 가장 최소 단위를 기준으로 8비트를 설정해뒀기 때문에 1바이트가 1글자의 단위가 된 것이다.

 

 

 

2. 실수형 타입 (소숫점 숫자 저장)

자료형 바이트 비트 저장 가능한 값의 범위 오차범위
float 4 32 1.4 x 10^-45 ~ 3.4 x 10^38 소수 이하 6자리
double 8 64 4.9 x 10^-324 ~ 1.8x10^308 소수 이하 15자리
컴퓨터가 실수를 처리할 때는 기본적으로 오차가 존재하는데 데이터를 표현하는 비트의 수에 따라 오차는 줄어들기 때문에 실수형 데이터는 정밀도(오차범위)가 중요하게 여겨진다.

 

*float의 경우 변수의 값 뒤에 꼭 f를 붙여줘야 에러가 나지 않는다!

 

 

3.문자형 타입

자료형 바이트 비트 저장 가능한 값의 범위
char 2 16 0 ~ 2^16-1 (유니코드 0 ~65535)

Java는 ASCII 대신 유니코드를 사용하기 때문에 char 자료형의 바이트 수는 1바이트가 아닌 2를 사용하는데 그 이유는 영자만을 지원하는 ASCII와는 다르게 실질적으로 모든 언어를 지원하는 Unicode의 크기가 더 크기 때문에 더 높은 범위를 지원하는 것이다. 참고로 char 타입에 변수를 대입할 때는 작은 따옴표 (' ')를 사용해야 한다.

 

 

 

4.논리형 타입

자료형 비트 반환 값
boolean 1 true 또는 false

 

 논리형 타입은 true와 false를 저장하는데 엄밀히 따지자면 0과 1로 표현하기에 필요한 메모리를 1비트만 가지는 것이다. 하지만 Java에서 다루는 최소 크기 단위가 byte이기 때문에 1bit라 할 지라도 1byte로 취급한다.

 

 

형변환

 

자동형변환

 

 Java에선 기본적으로 다른 데이터 타입을 사용한 값을 다른 데이터 타입을 사용하고 있는 변수에 넣더라도 자동으로 그 데이터 타입을 바꿔주는 기능을 제공하고 있는데 이를 자동 형변환이라고 한다. 자동 형변환은 프로그램 작성자가 별도의 작업을 하지 않아도 Java가 알아서 알맞은 타입으로 변환해주는데 여기서 중요한 점은 더 큰 데이터타입을 더 작은 데이터 타입으로 변환하는 것은 불가능하다는 점이다 (강제변환은 여전히 가능하다)

 

 

자동형변환이 되는 경우

  • byte 에서 short short에서 int 등 작은 단위의 데이터타입에서 큰 타입으로 변환
  • int 등의 정수형 타입에서 float 등의 실수형 타입으로 변환
  • char(문자)에서 정수나 실수로 변환

 

자동형변환이 안되는 경우

  • int 에서 short, double에서 float 등 큰 단위의 데이터타입에서 작은 타입으로 변환
  • float(실수) 에서 int(정수)로 형변환
  • 실수나 정수에서 문자로 변환
		byte a = 1;
		int b = 25;
		float c = 32.64f;
		char d = 'A';
		
		int X = a;
		byte Y = b; //더 큰 int를 byte에 넣을 수 없기 때문에 에러가 난다
		
		int Z = d;
		char z = b; //정수인 b를 문자형인 z에 넣으려 하니 에러가 난다

 

명시적 형변환/강제형변환 (casting)

 

 강제형변환은 말 그대로 형변환을 사용자가 강제하여 데이터 타입을 바꾸는 행위를 뜻하는데 앞서 자동형변환이 안된 경우에도 데이터가 왜곡되는 것을 감안하고 강제형변환을 통해 데이터타입을 바꿔줄 수도 있다.

 

(변환하고자하는 타입)변수명;

 

 

앞에서 자동형변환이 안된 데이터타입들을 강제형변환을 통해 형변환 시켜보자.

		byte Y = (byte)b;
		char Z = (char)b;
		
		System.out.println(Y);
		System.out.println(Z);

 

 

 

결과 값이 나오지만 정수를 문자로 형변환 시킨 값은 이상하게 나오는 걸 볼 수 있다.