본문 바로가기
컴퓨터/TIL

[Java]변수와 자료형

by stubborngastropod 2023. 1. 7.
728x90

초기 환경 설정

프로젝트 - 패키지 - 클래스 순으로 생성

 

package java230107;

public class study {

	public static void main(String[] args) {
		// print
		System.out.println("Hello Java");
	}

}

 

변수 선언

package java230107;

public class study {

	public static void main(String[] args) {
		int level;
		level = 10;
		System.out.println(level);
	}

}

변수 선언 시에는 자료형을 앞에 붙여준다.

선언 후 값을 대입해주는 과정이 없으면 에러가 발생한다.

 

자료형이 다른 정수 연산

package java230107;

public class study {

	public static void main(String[] args) {
		short sVal = 10;
		byte bVal = 20;
		System.out.println(sVal + bVal);
	}

}

자바의 자료형은 다음과 같이 존재한다.

  정수형 문자형 실수형 논리형
1 byte byte     boolean
2 byte short char    
4 byte int   float  
8 byte long   double  

표현할 수 있는 값의 범위에 차이가 나기 때문에 자료형이 다른 정수를 연산할 때는 자바에서 기본 단위로 사용하는 int를 기준으로 계산된다.

 

문자형

문자 자료형은 인코딩(encoding) 과정을 거쳐 숫자의 형태로 컴퓨터에서 표현된다. 1 byte 크기의 ASCII 코드에 의해 영문, 숫자, 특수문자 등을 표현할 수 있으며 다른 언어를 포함하여 표현할 시 2 byte 이상 크기의 유니코드를 사용한다.

 

package java230107;

public class study {

	public static void main(String[] args) {
		char ch1 = 'A';
		System.out.println(ch1);
		System.out.println((int)ch1);
	}

}

위 예제에서 ch1에 저장된 A를 int 자료형으로 출력할 시 A에 해당하는 ASCII 코드 값인 65가 출력된다.

반대로 문자형 변수에 숫자를 저장한다면 해당 숫자에 대응하는 문자가 출력된다.

 

package java230107;

public class study {

	public static void main(String[] args) {
		char ch1 = '한';
		char ch2 = '\uD55C';
		
		System.out.println(ch1);
		System.out.println(ch2);
	}

}

한글의 경우 유니코드를 사용하기 때문에 글자 '한'에 대응하는 유니코드 값이 16진수로 표현된다. (16진수 숫자 1개가 4비트 사용, 총 4개를 사용하기 때문에 2 byte 사용)

 

실수형

package java230107;

public class study {

	public static void main(String[] args) {
		double dnum = 3.14;
		float fnum = 3.14F;
		System.out.println(dnum);
		System.out.println(fnum);
	}

}

실수형은 float형과 double형으로 나뉜다.

  부호 지수부 가수부 총합
float 1 bit 8 bit 23 bit 32 bit (4 byte)
double 1 bit 11 bit 52 bit 64 bit (8 byte)

Java에서 실수는 기본적으로 더 정밀하게 표현할 수 있는 double형을 사용한다. 만약 float형의 범위 내에 있는 실수를 float형으로 저장하고자 할 때는 숫자 뒤에 F/f 식별자를 붙여 식별해주어야 한다.

 

논리형

package java230107;

public class study {

	public static void main(String[] args) {
		boolean isMarried = true;
        System.out.println(isMarried);
	}

}

논리형은 true/false만 대입 및 출력된다.

 

지역 변수 자료형 추출(var)

package java230107;

public class study {

	public static void main(String[] args) {
		var num = 10; //int num = 10;
		var dNum = 10.0; //double dNum = 10.0;
		var str = "hello"; //String str = "hello";
	}

}

Java는 지역 변수 자료형 추출을 통해 자료형 없이 컴파일러가 변수를 추측하여 선언할 수 있다.

 

상수형

package java230107;

public class study {

	public static void main(String[] args) {
		final int MAX_NUM = 100; //선언+초기화
		final int MIN_NUM
		MIN_NUM = 0; // 선언 후 초기화
		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);
	}

}

상수는 코드 내에서 직접 값을 하나하나 지정하는 것에 비해 선언된 값 하나만 변경해주면 되므로, 코드 내 전체 값을 변경할 시 번거로움을 줄여준다.

 

형 변환

자료형이 다른 변수들에 대해 연산을 실시할 경우 자료형이 통일되어야 하는데, 이는 형 변환을 통해 이루어진다.

 

package java230107;

public class study {

	public static void main(String[] args) {
		byte bNum = 10;
		int iNum = bNum;
		System.out.println(bNum);
		System.out.println(iNum);
		
		int iNum2 = 20;
		float fNum = iNum2;
		System.out.println(iNum);
		System.out.println(fNum);
		
		double dNum;
		dNum = fNum + iNum;
		System.out.println(dNum);
	}

}

묵시적 형 변환은 크기가 작은 자료형에서 큰 자료형으로 대입하는 경우 자동으로 이루어지기 때문에 자동 형 변환이라고도 한다. 형 변환이 이루어지는 관계는 다음과 같다.

byte → short / char → int → long → float → double

8 byte 크기인 long형이 4 byte 크기인 float형으로 변환되는 이유는 실수의 표현 범위가 더 넓고 정밀하기 때문이다.

 

package java230107;

public class study {

	public static void main(String[] args) {
		int iNum = 10;
		byte bNum = (byte)iNum;
		System.out.println(iNum);
		System.out.println(bNum);
	}

}

명시적 형 변환시에는 괄호 안에 변환할 자료형의 이름을 명시해주어야 하며 강제 형 변환이라고도 한다. 만약 바뀌기 전의 자료형의 값이 바뀐 후 자료형이 표현할 수 있는 범위를 넘어서게 되면 자료 손실이 발생하게 된다.

 

 

참고: 박은종. 『Do it! 자바 프로그래밍 입문』. 이지스퍼블리싱(주): 서울, 2022

728x90

'컴퓨터 > TIL' 카테고리의 다른 글

[Git]git 기초  (0) 2023.01.12

댓글