본문 바로가기
Programming/Java

[JAVA] 데이터 타입과 형변환

by 공부합시다홍아 2023. 10. 25.
 

[JAVA] - 출력과 선언 규칙

JAVA 11 jdk 설치 방법 JAVA 11 설치방법 https://www.oracle.com/ Oracle | Cloud Applications and Cloud Platform Oracle condemns the terrorist attacks against Israel and its citizens. Oracle will provide all support necessary to its employees and to t

hong-study.tistory.com

데이터 타입
자바에서 '데이터 타입'은 해당 데이터가 메모리에 어떻게 저장되고 프로그램에서
어떻게 처리되어야 하는지를 명시적으로 알려주는 것이다. 

정수형 데이터 타입
  • 정수형의 데이터 타입에 아래와 같이 4가지 유형이 있다.

  • 자바에서 정수의 2진수 표현 방법은 "부호와 2의 보수" 표현방법을 사용합니다.
  • 정수형은 10진수뿐만 아니ㄱ라 2진수, 8진수, 16진수 등의 형태도 표현할 수 있습니다.
  • 정수형의 디폴트는 int이므로 long형을 지정하려면 할당할 숫자 뒤에 "L"을 붙여줍니다.
package day01;

public class DateType {

	public static void main(String[] args) {
		
		byte a = 127; // -128~127
		
		short b = -32768; // -32768 ~ 32767		
		
		int c = 214467000; // -2147483648 ~ 2147483647
		
		long d = 1231234567489L;
		
		//2진수 = 0b
		int f1 = 0b11;
		//8진수 = 0
		int f2 = 0110;
		//16진수 = 0x
		int f3 = 0x15;
		
		System.out.println(f1);
		System.out.println(f2);
		System.out.println(f3);

실수형 데이터 타입
  • 실수형에는 아래와 같이 2가지 유형이 있습니다.
  • 과거 실수를 표현할 때는 float를 주로 사용했지만, 하드웨어 발달과 메모리공간 증대로 인해 double을 주로 사용한다.

  • 실수형은 디폴트형이 double이므로 float형을 지정하려면 숫자 뒤에 "F"를 붙여줍니다.
  • 실수형 표현은 소수점 표현방식인 10진수형 표현방식과, 지수 형식으로 나타내는 과학기술용 표기법이 사용됩니다.

※ 표기 한계 존재

  • 메모리가 한정적이기 때문에 표현할 수 있는 수의 제한이 있다.
  • float은 7자리 / double은 15자리 이기때문에 double의 신뢰성이 더 높다.
float g1 = 3.1415912F;
double g2 = 3.1415921122;
		
System.out.println(g1);
System.out.println(g2);
double g3 = 0.000314e4;
System.out.println(g3);
		
double g4 = 314.15e-2;
System.out.println(g4);
  • e4 는 10의 4승을 뜻한다.
  • e-2는 10의 -2승을 뜻한다.

논리형 데이터 타입
  • 참(true) 또는거짓(false)의 값을 갖는 자료형을 논리형(불리언) 자료형이라고 한다.

  • 논리형 값에는 true와 false가 있습니다.
  • 논리형은 다른 데이터 타입과 서로 형 변환(type casting)할 수 없습니다.
  • 또한 C언어에서처럼 숫자 값을 논리 값으로 해석하여, 0을 false로 다루고 0이 아닌 값을 true로 해석하는 것을 허용하지 않습니다.
  • 논리형 데이터타입에서는 오직 true와 false만 허용합니다.
boolean c1 = true;
boolean c2 = false;
		
System.out.println(c1);
System.out.println(c2);

문자열 데이터 타입
char 단일 문자
String 문자열을 표현
  • 단일 문자는 char형으로 표현합니다.
  • char형은 0~ 2^16의 범위 내에서 부호가 없는 16비트(2byte) 숫자를 사용하여 유니코드 문자를 표현합니다.
  • char형 값은 홑 따옴표 (' ')안에 넣어야 합니다.
  • 문자열을 표현할 때는 String을 사용합니다.
  • String은 기본 데이터형이 아닙니다. 문자열을 좀 더 쉽게 다루기 위해 만들어 놓은 클래스입니다.
  • String 클래스는 문자열을 표현하는데 사용됩니다.
  • 문자열 값은 겹 따옴표(" ")안에 넣습니다.

 

문자열 값에 숫자를 넣으면 ASCII 코드로 반환되어 출력된다.

ASCII 코드

※ ASCII코 : 크기를 2bytes로 늘리고, 65536개 글자에 숫자값을 지정

char d1= 'a';
char d2= 65;
char d3= 44032;
char d4= '가';
char d5= '\uAC00';
		
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);
System.out.println(d5);

  • d2의 값은 ASCII 코드에 따라 "A"로 출력된다.

String s1 = "hello";
String s2 = "world";
		
System.out.println(s1+s2);
		
System.out.println(200+200);
System.out.println(200+"200");
System.out.println(200+200+"200");


형변환 (Type Casting)
  • 데이터의 크기
    • byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

1. 크기가 작은 타입을 큰 타입에 저장할 때는 자동으로 형변환(JVM)이 일어난다.

byte b = 10;
short s = b;
int i = b;
long l = b;

System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);

결과 : 10

char c = '가';
int j = c; //char -> int로 자동변환
		
System.out.println(j);
		
int k = 1000;
double d = k; // int -> double
		
System.out.println(d);


2. 크기가 큰 타입을 작은 타입에 저장할 때는 (type) 캐스팅을 한다.

package day01;

public class Casting02 {

	public static void main(String[] args) {

		int i = 70;
		
		byte b = (byte)i; // int -> byte 형변환
		
		char c = (char)i; // int -> char 형변환
		
		System.out.println("b : "+b);
		System.out.println("C : "+c);
		System.out.println();
		
		float f = 3.14F;
		
		int i1 = (int)f; // float -> int로 형변환

		System.out.println("i1 : "+i1);
		
		// 주의
		// 형변환시 저장할 수 없는 범위가 들어오면 잘려나간 값이 저장됩니다.
		int k = 1000;
		byte b1 = (byte)k;
		
		//예외적인 상황 char -> short 로 변경시에도 명시적으로 형변환 작업을 해야함
		char cc = 'A';
		short ss = (short)cc;
		
		System.out.println(ss);
	}

}


3. 연산이 일어났을 때의 형변환

  • 서로 다른 타입의 연산의 결과는 큰 타입에 맞추어 자동 형변환이 일어납니다.
package day01;

public class Casting03 {

	public static void main(String[] args) {
		
		char c = 'B';
		int i = 2;
		
		char cc = (char)(c + i);
		int ii = c + i;
		
		System.out.println(cc);
		System.out.println(ii);
		
		

	}

}

 

  • Int 형보다 작은 타입의 연산은 무조건 Int가 된다.
    • byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
    • Int가 기준
    • byte 혹은 short 간의 형변환시 int로
    • int 혹은 상위 형들간의 형변환시는 무조건 큰 값으로 형변환된다고 생각하면 이해가 쉽다.
byte b1 = 100;
byte b2 = 3;
byte b3 = (byte)(b1+b2);

 

728x90

'Programming > Java' 카테고리의 다른 글

[JAVA] 배열과 입력  (2) 2023.10.26
[JAVA] 연산자  (0) 2023.10.25
[JAVA] - 출력과 선언 규칙  (0) 2023.10.25
JAVA 11 jdk 설치 방법  (0) 2023.10.25
선택 정렬 알고리즘  (0) 2020.10.20