관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch2 - 10 ~11 [기본형과 참조형, 기본형의 종류와 범위] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch2 - 10 ~11 [기본형과 참조형, 기본형의 종류와 범위]

소소한나구리 2023. 11. 2. 12:45

값의 타입

(1) 값(data) : 8개의 기본형 데이터

  • 문자 : char
  • 숫자
    • 정수 : byte, short,int(가장 많이 사용),long
    • 실수 : float, double
  • 논리 : boolean
    • true
    • false

(2) 기본형 (Primitive type) - 8개(실제 값을 저장)

    • boolean
    • char
    • byte - 1byte
    • short - 2byte
    • int - 4byte
    • long - 8byte
    • float
    • double

(3) 참조형 (Reference type) : 무한갯수

  • 기본형을 제외한 나머지 (String, System 등)
  • 메모리 주소를 저장 (4byte - 32bit JVM 또는 8byte - 64bit JVM)
    • 4byte로 메모리주소를 표현할 수 있는 숫자의 최대값은 약 40억byte(4GB) - 8byte 는 1600만 TB 까지 가능하지만 실제로 프로그램에서 사용할 수 있는 메모리 수는 2GB (32bit) 1TB(64bit) 정도로 운영체제가 제한함
Date today; // 참조형 변수 today를 선언
today = new Date(); // today에 객체의 주소를 저장

기본형 타입(Primitive Type)의 종류와 크기

  • 논리형(boolean) - truefalse하나를 값으로 갖으며 조건식논리적 계산에 사용
  • 문자형(char) - 문자를 저장하는데 사용되며 변수 당 하나의 문자만을 저장할 수 있다(여러 문자를 사용할 경우 String으로 사용)
  • 정수형 - 정수 값을 저장하는데 사용되며 주로 사용하는 것은 int와 long(아주 큰 정수)이며, byte는 이진 데이터를, short(잘 사용하 않음) 는 c언어와의 호환을 위해 추가 됨
  • 실수형 - 실수 값을 저장하는 데 사용, flaotdouble이 있음
종류 1byte 2byte 3byte 4byte
논리형 boolean      
문자형   char    
정수형 byte short int(기본타입) long
실수형     float double(기본타입)
  • boolean은 true와 false만 사용 -> 1bit만 있어도 됨, 하지만 자바에서 데이터를 다루는 최소 단위가 byte이므로 1byte를 사용
    • 1bit = 2진수 1자리
    • 1byte = 8bit
  • 2byte의 문자 체계인 유니코드를 사용하고 있어 char 타입은 2byte를 사용 (참고로 C언어는 1byte)
  • int보다 짧아서 short, int보다 길어서 long으로 불림
  • float(부동소수점)타입보다 정밀도가 2배 높아서 double로 불림

기본형 타입(Primitive Type)의 표현범위

byte b; // b를 선언 했을 시 1byte로(8bit) 저장 , 1bit는 2진수 한자리 (0 or 1)
b = 3; // 10진수 3이 2진수로 변환 되어 저장

 

(1) bit

  • 1bit : 0, 1 -> 총 2개 표현 (2^1)
  • 2bit : 00, 01, 10, 11 -> 총 4개 표현 (2^2)
  • 8bit : 총 256개의 값 표현 (2^8)
  • nbit로 표현할 수 있는 값의 개수 -> 2^n
  • nbit로 표현할 수 있는 부호없는 정수의 범위 : 0 ~ 2^n -1
    • ex) 8bit일 경우 : 0 ~ 255 까지(0을 포함해야 함)
  • nbit로 표현할 수 있는 부호있는 정수의 범위 : -2^(n-1) ~ 2^(n-1)-1
    • 자바에서의 정수형은 모두 부호가 있음
    • ex) 8bit일 경우 : -128 ~ 127

(2) byte

  • byte(1byte = 8bit) 저장범위 : -2^7 ~ 2^7 -1
  • 저장형식 :  S l 7bit
    • S = 부호비트(sign bit)
    • 0(양수) l 7 bit : 128개 (0 ~ 127)
    • 1(음수) l 7 bit : 128 ( -1 ~ -128)
    • 총 2^8 = 256

(3) short

  • short(2byte = 16bit) 저장범위 : -2^15 ~ 2^15 -1
  • 저장형식 :  S l 15bit (-32,768 ~ 32,767)

(4) char

  • char(2byte = 16bit) 저장범위 : 0 ~ 2^16-1
    • 표현형식 : 16bit : 0 ~ 65,535
    • 문자 A 를 변수에 저장할 경우 문자 A의 문자코드(65 - 10진수)가 2진수로 변환되어 저장
    • 문자코드 = 문자마다 일련번호를 붙혀놓은 것, 음수를 사용할 필요가 없어 부호비트가 없음  -> 모든 값을 양수로 저장

(5) int

  • int(4byte = 32bit) 저장범위 : -2^31 ~ 2^31 -1
  • 저장형식 :  S l 31bit : 약 -20억 ~ 20억

(6) long

  • long(8byte = 64bit) 타입의 값 저장범위 : -2^63 ~ 2^63 -1
  • 저장형식 :  S l 63bit : 약 -800경 ~ 800억

** 참고사항

  • 800경을 넘는 수를 다뤄야할 경우 실수타입이나 Biginteger클래스를 사용
  • 정수형과 실수형에는 모두 부호비트가 있음

(8) float

  • float(4byte = 32bit) 저장범위
    • 양수 : 1.4 X 10^-45 ~ 3.4 X 10^38
    • 음수 : - 3.4 X 10^38 ~ -1.4 X 10^-45
    • float 타입으로 표현 불가능한 범위 : -1.4 X 10^-45 ~ 1.4 X 10^-45
      • 저장형식 :  S l E(8) l M(23) : 1+8+23 = 32bit = 4byte
        • S: 부호 , E : 지수 , M : 가수
      • 정밀도(가수의 자리수) : 10진수로 7자리까지 (오차없이 표현가능한 범위)
      • 가수는 23자리지만 정규화를 통해서 24자리까지 저장 가능
        • 10^7 < 2^24 < 10^8

(9) double

  • double(8byte = 64bit) 저장범위
    • 정밀도 : 10진수로 15자리(오차없이 표현가능한 범위)
    • 저장형식 : S l E(11)M(52):1+11+52 = 64bit = 8byte

** 참고사항

  • 실수형은 저장형식의 차이로 인하여 정수형 보다 큰 값을 저장할 수 있지만 저장하려는 값과 실제 저장하는 값의 오차가 발생할 수 있음
    • 정밀도(가수의 자리수)가 중요한 이유
  • 실수형을 저장할 때 단순히 크기로만 타입을 정하면 안되고 정확한 계산이 필요한 경우에는 정밀도가 중요
  • 7자리의 정밀도는 생각보다 높지 않으므로 정밀도가 높은 double타입실수형의 디폴드 값

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의