Java

[JAVA] 자바의 자료형

hazel__ 2022. 2. 5. 19:01

변수

변수는 변하는 값을 의미한다.

표현하려는 값에 맞는 데이터 타입을 이용하여 변수를 선언, 정의할 수 있다.

변수 선언은 자료형과 변수 명으로 선언하고, 선언과 동시에 초기화 할 수 있다.

 

변수 선언 예제

public static void main(String[] args){
	int age;
	age = 10;

	int level = 10000;

	System.out.println(age);
	System.out.println(level);
}

//print
10
10000

 

변수의 이름

  • 영문자, 숫자를 사용할 수 있고, 특수문자는 $, _ 만 사용할 수 있다.
  • 숫자로 시작할 수 없다.
  • 예약어는 사용할 수 없다. (while, break, ...)
  • 용도에 맞고, 가독성 있게 만들어야 한다.

 


 

진수

자바에서는 숫자 자료형에 저장된 10진수, 2진수, 8진수, 16진수를 10진수로 출력할 수 있다.

public static void main(String[] args) {
	System.out.println("Hello, Java");
		int num = 10;
		int bNum = 0B1010;
		int oNum = 012;
		int xNum = 0xa;
		
		System.out.println(num);
		System.out.println(bNum);
		System.out.println(oNum);
		System.out.println(xNum);
}

 


 

기본 자료형

정수

변수를 선언하면 자료형의 크기만큼 메모리가 할당된다.

자료형 바이트 크기 범위

byte 1 -2^7 ~ 2^7 -1
short 2 -2^15 ~ 2^15 -1
int 4 -2^31 ~ 2^31 -1
long 8 -2^63 ~ 2^63 -1
long의 경우, 숫자 뒤에 L 또는 l 을 써서 long 형임을 표시한다.

 


 

실수

실수는 정수보다 정밀하기 때문에, 정수와 다른 방식으로 표현한다.

부동소수점 방식

실수 값 0.1

1.0 x 10^{-1}

지수부(-1)와 가수부(1.0)로 표현한다.

💡 컴퓨터에서는 밑수를 2로 사용한다.

 


 

정규화

가수가 밑수보다 작은 작은 한 자리까지 가수로 표현되는 것을 말한다.

 

실수 값 0.2

0.4 x 2^{-1}

 

정규화

1.6 x 2^{-3}

 


 

float형과 double 형

자바에서 실수의 기본 타입은 double을 사용한다.

 

float

부호비트(1비트), 지수부(8비트), 가수부(23비트) - 32bits(4bytes)

double

부호비트(1비트), 지수부(11비트), 가수부(52비트) - 64bits(8bytes)

 

public static void main(String[] args){
	double dnum = 3.14;
	float fnum = 3.14f;

	System.out.println(dnum);
	System.out.println(fnum);
}

 


 

부동 소수점 방식의 오류

지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기때문에 약간의 오차가 발생할 수 있다.

package test;

public class test {
	public static void main(String[] args) {
		double dnum = 1;
		
		for (int i = 0; i < 1000; i++) {
			dnum += 0.1;
		}
		System.out.println(dnum);
	}
}
//예상 - 101

 


 

문자

문자를 특정 정수 값을 정의해서 표현한다.

  • 문자세트(character set) : 각 문자를 표현한 코드 값을 모아둔 것을 말한다.(ascii, euc-kr, utf-8, utf-16, ...)

자바에서는 UNICODE를 사용한다.

utf-16 인코딩을 사용하여 모든 문자를 2바이트로 표시한다.

숫자로 표현되므로 숫자를 넣어도 문자로 출력 할 수 있다.

package test;

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

 

  • 인코딩 : 문자를 특정 정수 값으로 변환하는 것
  • 디코딩 : 정수 값을 문자로 변환하는 것
  • 유니코드(unicode) : 전 세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식
  • utf-8 : 8 bit unicode transform format, 1~4 바이트로 표현할 수 있다.
  • utf-16 : 16 bit unicode transform format, 2~4 바이트로 표현할 수 있다.

 


 

논리형

참(true), 거짓(false)으로 나타낼 수 있다.

1byte를 사용한다.

package test;

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

 


 

var

⚠️ 자바 10 이상에서 지원된다.

자료형 없이 지역변수로 사용할 수 있다.

package test;

public class test {
	public static void main(String[] args) {
		var x = 100;
		var y = 1.90;
		var z = 'a';
		var a = "hello";
		var b = false;
		
		System.out.println(x);
		System.out.println(y);
		System.out.println(z);
		System.out.println(a);
		System.out.println(b);
	}
}

 


 

⛔ 전역변수로 사용할 수 없다
package test;

public class test {
	var x = 100;
	public static void main(String[] args) {
		System.out.println(x);
	}
}

 


 

상수

constant

상수는 변하지 않는 수를 말한다.

final 예약어를 사용하여 선언한다.

package test;

public class test {
	public static void main(String[] args) {
		final int x = 100;
		final int y;
		
		y = 10;
		System.out.println(x);
		System.out.println(y);
	}
}

 


 

리터럴

literal

숫자, 문자, 논리값을 뜻한다.

리터럴은 constant pool에 저장된다.

정수 리터럴은 int로, 실수 리터럴은 double로 저장된다.

 


 

형 변환

type conversion

서로 다른 자료형 간에 연산등의 수행을 위해 하나의 자료형으로 변환하는 것을 말한다.

 

묵시적 형 변환(explicit type conversion)

자동 형 변환

바이트 크기가 작은 자료형에서 자료형으로의 형 변환은 자동으로 이루어진다.

더 정밀한 자료형으로의 형 변환은 자동으로 이루어진다.

package test;

public class test {
	public static void main(String[] args) {
		int i = 100;
		long j = i;
		double k = j;
		
		System.out.println(i);
		System.out.println(j);
		System.out.println(k);
	}
}

 


 

명시적 형 변환(implicit type conversion)

강제 형 변환

바이트가 자료형에서 작은 자료형으로 형변환하는 경우, 데이터의 손실이 발생할 수 있다.

package test;

public class test {
	public static void main(String[] args) {
		double k = 1234.56789;
		float j = (float)k;
		int i = (int)j;
		
		System.out.println(k);
		System.out.println(j);
		System.out.println(i);
	}
}

 


 

참조 자료형

클래스형으로 변수를 선언하여 사용할 수 있다.

참조 자료형을 사용할 때에는 해당 변수에 대해 생성해야 한다.

(단, String 클래스는 예외적으로 생성하지 않고 사용할 수 있다.)

public class Student{
	int id;
	String name;
	String phoneNumber;
}

 

 

'Java' 카테고리의 다른 글

[JAVA] 객체와 객체지향 프로그래밍  (0) 2022.02.08
[JAVA] 반복문 ~ while ~ for  (0) 2022.02.07
[JAVA] 조건문 ~ if  (0) 2022.02.07
[JAVA] 자바의 연산자  (0) 2022.02.07
[JAVA] 자바란?  (0) 2022.02.01