[JAVA] 데이터 타입

2020. 5. 21. 17:17·Computer Science/Programming Language

bit : 0과 1을 메모리에 저장하는 최소 기억 단위

byte = 8 bit

 

기본타입(primitive) : 정해진 메모리 사용 크기 (바이트크기)로 값을 저장

 

- 정수 타입 

의 값 저장 가능(n : 메모리 사용 크기(bit 수)

ex. int 타입은 4byte( 32 bit) -> 메모리 사용크기: -2^31 ~ 2^31 - 1

 

1. 정수타입(byte, char, short, int, long)

(1) byte 타입 (1byte = 8bit 가짐)

- 색상 정보 및 파일 또는 이미지 등의 이진(바이너리) 데이터를 처리할 때 주로 사용됨

- -128 ~ 127 (n=7) (양수가 127인 이유 : 0 포함)

- 범위를 초과하는 값이 byte타입 변수에 저장될 경우 다음과 같은 컴파일 에러가 발생한다.

"Type mismatch : cannot convert from int to byte" 

public class ByteExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte var1 =-128;
		byte var2 = -30;
		byte var3 = 0;
		byte var4 = 30;
		byte var5 = 127;
		//byte var6 =128 	//컴파일 에러
		
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var3);
		System.out.println(var4);
		System.out.println(var5);
		
	}

}

- 만약 실행 중에 저장할 수 있는 값의 범위를 초과하면 최솟값부터 다시 시작함

다음 예제를 실행시키면 이를 확인할 수 있음

public class GarbageValueExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte var1 = 125;
		int var2 =125;
		for (int i=0; i<5;i++) {
			for (int j=0;j<5;j++) {
				var1++;
				var2++;
				System.out.println("var1: "+var1+"\t"+"var2:"+var2);
			}
		}
	}

}

 

(2) char 타입

자바는 모든 문자를 Unicode(유니코드)로 처리

유니코드 - 하나의 문자에 대해 하나의 코드값 부여

            - 0~65535 범위의 2byte 크기를 가진 정수값

            - 0~127 : 아스키(ASCII)문자 할당 , 44032~55203: 한글 11172자

- char 타입 변수에 작은 따옴표(')로 감싼 문자 대입 -> 해당 문자의 유니코드 저장

- char 타입 변수에 직접 유니코드 정수값 저장 가능

- 음수값 저장 X -> 0~65535(2^16개) 저장 O

public class CharExample {

	public static void main(String[] args) {
		char c1 = 'A';	//문자 직접 저장
		char c2= 65;	//10진수로 저장
		char c3='\u0041';	//16진수로 저장
		
		int uniCode = c1;	//유니코드 얻기
		
		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
		System.out.println(uniCode);
	}
}

 

문자열 저장 : String 타입 사용

String 변수이름 = "~~~";

- String : 기본타입X, 클래스 타입 O, String 변수 : 참조 변수 

- 문자열을 String 변수에 대입 -> String 객체 생성 -> String 변수는 String 객체의 번지 참조

- 문자열이 변수에 직접 저장 X

 

cf) 다음과 같이 작음따옴표 두개를 연달아 붙이면

char c = '';

컴파일 에러("Invalid character constant")가 발생한다

 solution 1. 작은 따옴표 사이에 공백 추가

 solution 2. 큰 따옴표 사용 (큰따옴표는 공백이 없어도 에러 발생 X)

 

(3) short 타입 (2byte = 16bit 저장 가능)

 

(4) int 타입 (4byte = 32bit 저장가능)

- 자바에서는 정수연산을 4byte로 처리하기 때문에 변수를 byte타입, short 타입으로 선언해도 +연산시 int타입으로 변환된 후 연산되고 결과 또한 int 타입이 됨

- 변수에 어떤 진수로 입력하더라도 2진수로 변환되어 저장

public class IntExample {

	public static void main(String[] args) {
		int var1 = 10;		//10진수로 저장
		int var2 = 012;		//8진수로 저장
		int var3 = 0xA;		//16진수로 저장
		
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var3);
        
	}
}

 

(5) long 타입 (8byte = 64 bit 저장 가능)

- 수치가 큰 데이터 다루는 프로그램에서 사용

- long 타입 변수 초기화 : 정수값 뒤에 l / L 붙임 

- int 타입의 저장 범위를 넘는 큰 정수 : 'L' 붙여야 함 (소문자일 경우 에러 발생)

public class LongExample {

	public static void main(String[] args) {
		
		long var1 =10;
		long var2= 20L;
		//long var3 = 1000000000000; 	//컴파일에러
		long var4 = 1000000000000L; 
		
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var4);
	}

}

2. 실수타입( float, double)

float (4byte) double(8byte)

- floating-point (부동 소수점) 방식으로 저장됨

( + 부호, m 가수(mantissa) , n 지수(exponent) )

 

 

float

부호 (1 bit) 지수 (8 bit) 가수 (23 bit)

double

부호 (1 bit) 지수 (11 bit) 가수 (52 bit)

- float 보다 double 이 더 정밀한 값 저장 가능

 

- 자바는 실수 리터럴의 기본 타입을 double로 간주하기 때문에 float에 실수리터럴에 그냥 저장하게 되면 컴파일에러가 발생한다

(Type mismatch : cannot convert from double to float)

double var1 =3.14;
float var2 = 3.14;	//컴파일 에러
float var3 = 3.14F;

실수 리터럴을 float타입 변수에 저장하려면 위 코드와 같이 F 나 f를 붙여야함

 

public class FloatDoubleExample {

	public static void main(String[] args) {
		//실수값 저장
		double var1 =3.14;
		//float var2 = 3.14; //컴파일 에러(Type mismatch)
		float var3 = 3.14F;
		
		//정밀도 테스트
		double var4 = 0.1234567890123456789;
		float var5 = 0.1234567890123456789F;
		
		System.out.println("var1: "+var1);
		System.out.println("var3: "+var3);
		System.out.println("var4: "+var4);
		System.out.println("var5: "+var5);
		
		//e 사용하기
		int var6 = 3000000;
		double var7 = 3e6;
		float var8 = 3e6F;
		double var9 = 2e-3;
		
		System.out.println("var6: "+var6);
		System.out.println("var7: "+var7);
		System.out.println("var8: "+var8);
		System.out.println("var9: "+var9);

	}

}

 컴파일 해보면

var4 와 var5를 비교해보면 double타입이 float타입보다 두배이상 정밀하게 값이 저장됨을 확인 가능

 

3. 논리타입(boolean)

boolean(1byte = 8bit 저장가능)

- 두가지 상태값을 저장할 필요성이 있을 경우 사용 (주로 조건문, 제어문의 실행 흐름 변경에 사용)

public class BooleanExample {
	public static void main(String[] args) {
		boolean stop= true;
		if(stop) System.out.println("중지합니다.");
		else System.out.println("시작합니다.");
	}
}

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > Programming Language' 카테고리의 다른 글

[JAVA] 연산자- 단항연산자  (0) 2020.05.26
[JAVA] 타입변환  (0) 2020.05.25
[JAVA] 변수  (0) 2020.05.21
[JAVA] 명령프롬프트에서 java 실행  (0) 2020.05.21
[JAVA] 자바란  (0) 2020.05.20
'Computer Science/Programming Language' 카테고리의 다른 글
  • [JAVA] 연산자- 단항연산자
  • [JAVA] 타입변환
  • [JAVA] 변수
  • [JAVA] 명령프롬프트에서 java 실행
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    오블완
    티스토리챌린지
    cmd error
    해시
    mysql error
    leetcode
    c++error
    LNK2001
    런타임 에러
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[JAVA] 데이터 타입
상단으로

티스토리툴바