강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 메소드
  • CSS 속성
  • CSS 박스 크기 설정
  • 메서드
  • 자바
  • 백준
  • til
  • 알고리즘 공부

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

Langauge/Java-basic

[Java] 자료형(Type)

2022. 7. 5. 23:19

자료형이란?

  • 자료형은 어떤 값의 유형 및 종류를 의미하며, 타입에 따라 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식이 결정된다.
  • 자료형은 크게 기본 자료형(primitive type)과 참조 자료형(reference type)으로 구분할 수 있다.
    • 기본 자료형 :  변수와 변수의 데이터가 모두 스택 메모리 영역에 저장된다. 즉, 기본 자료형은 데이터를 저장할 때 변수에 데이터의 실제 값이 저장된다.
    • 참조 자료형 : 변수는 기본자료형과 동일하게 스택 메모리에 저장되지만 변수에 할당된 데이터 값은 힙 메모리 영역에 저장된다.
      즉, 데이터를 힙 메모리에 저장한 후 힙 메모리의 주소 값이 변수에 저장된다.
  • 참조 자료형은 기본 자료형 8가지를 제외한 모든 자료형이며, 직접 정의할 수도 있다.

기본 자료형(primitive type)

자료형 자료형의 크기 범위
논리 boolean 1byte true, false
정수 byte 1byte -2⁷ ~ 2⁷-1
short 2byte -2¹⁵ ~ 2¹⁵-1
int 4byte -2³¹ ~ 2³¹-1
long 8byte -2⁶³ ~ 2⁶³-1
실수 float 4byte ±(1.40×10⁻⁴⁵ ~ 3.40×10³⁸)
double 8byte ±(4.94×10⁻³²⁴ ~ 1.79×10³⁰⁸)
문자 char 2byte 0 ~ 2⁶-1
  부호 비트 가수 비트 지수 비트 정밀도
float 1 23 8 7자리
double 1 52 11 15자리
  • 지수 비트 : 값의 범위
  • 가수 비트 : 값의 정밀도
  • 부호 비트 : 음수와 양수의 구분

논리 자료형 - boolean

  • 참 또는 거짓을 저장할 수 있는 데이터 타입으로 오직 true 혹은 false를 값으로 가진다.
  • 따라서 1bit로도 값을 저장할 수 있지만 JVM이 다룰 수 있는 데이터의 최소 단위가 1byte이므로 1byte가 할당된다.
boolean isRainy = true;
boolean isAdult = false;

정수 자료형 - byte, short, int, long

  • 할당된 값의 범위가 byte와 short 타입에 저장할 수 없는 범위라면 정수 리터럴은 모두 int 타입으로 인식된다.
    또한 long 타입에 정수 리터럴을 저장할 때도 기본적으로 int 타입으로 인식된다.
  • 따라서 long 타입 리터럴의 경우 리터럴 뒤에 L(l)을 붙여야 정수 리터럴이 long 타입으로 인식된다.
    일반적으로 숫자 1과 혼동을 방지하기 위해 대문자 L을 붙인다.
// 예시
byte byteNum = 123;
short shortNum = 12345;
int intNum = 123456789;
long longNum = 12345678910L; // 정수에 L을 붙여 long타입의 정수라고 표기

// 자료형의 범위를 벗어난 값을 할당할 경우 에러 발생
byte byteNum = 130;
short shortNum = 123456;
int intNum = 12345678910;

// 언더바 사용 가능(구분하기 위해서)
int intNum = 12_345_678;
int longNum = 12_345_678_910L; // 정수에 L을 붙여 long타입의 정수라고 표기

실수 자료형 - float, double

  • Java는 실수 리터럴을 기본적으로 double 자료형으로 인식한다.
  • float형 자료형에 값을 할당하기 위해서는 f(또는 F)를 붙여 float자료형이라고 인식할 수 있게 해야 한다.
    기본적으로 f를 붙여 사용한다.
// float형 리터럴을 float형 변수에 할당
float value = 3.14f // long과 동일하게 f를 붙여 float타입의 실수라고 표기

// double형 리터럴을 double형 변수에 할당
double value = 3.141592d;
double value = 3.141592; // f는 생략할 수 없지만 d는 생략 가능

문자 자료형 - char

  • char는 문자를 저장하는 자료형으로, 문자를 작은 따옴표('') 안에 표기한다. (큰 따옴표를 사용한 리터럴은 문자열 리터럴로 인식)
  • 메모리에는 2진수의 값(0과 1)만 저장할 수 있기 때문에 자바는 모든 문자에 숫자 코드 번호를 부여한 유니코드로 문자를 저장하고 출력한다.
  • 따라서 문자 자료형에 문자가 아닌 정수를 할당할 수 있으며, 정수를 할당하게 되면 할당된 정수와 유니코드 번호가 일치하는 문자를 출력하게 된다.
char letter1 = 'a';
char letter2 = 'ab'; // 에러 : 단 하나의 문자만 할당 가능
char letter3 = "a"; // 에러 : 작은 따옴표가 아닌 큰 따옴표 사용
char letter4 = 65;

System.out.println(letter4); // 출력 결과 : A (유니코드 65번의 문자)

타입 변환 (형변환)

boolean을 제외한 기본 자료형 7개는 서로 타입을 변환할 수 있다.

위에서 작성한 내용과 같이 정수나 실수 리터럴을 리터럴에 L 또는 f를 붙여 long, float으로 타입 변환할 수 있다.

long 변수명 = 값 + L;
long 변수명 = 값 + l;
float 변수명 = 값 + F;
float 변수명 = 값 + f;
// 자료형의 크기(범위)
byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)

자동 타입 변환 (자동 형 변환)

  • 자료형의 범위가 작은 타입에서 큰 타입으로 변환할 때 (업캐스팅 up-casting)
    • 자료형의 크기(범위)가 작은 타입에서 큰 타입으로 변환될 때는 어떠한 데이터 손실도 발생하지 않으며, 컴파일러가 자동으로 타입 변환을 실행한다.(Ex : byte -> int)
  • 정밀도가 상대적으로 낮은 타입에서 높은 타입으로 변환할 때 (Ex : 정수 -> 실수)

수동 타입 변환 (강제 형 변환)

  • 자료형의 범위가 큰 타입에서 작은 타입으로 변환할 때 (다운캐스팅 down-casting)
    • 큰 범위의 타입에서 작은 범위의 타입으로 변환될 때는 데이터의 손실이 발생할 우려가 있으므로 컴파일러가 자동으로 타입 변환을 실행하지 않는다.
    • 더 큰 데이터 타입을 작은 데이터 타입의 변수에 저장하기 위해서는 개발자가 명시적으로 타입을 변환을 수행해야 한다.
  • 타입 변환 방법은 변환 대상 앞에 (변환할 타입명)을 표기하면 된다.
//int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환
int intValue = 128;
byte byteValue = (byte)intValue;

System.out.println(byteValue); // 출력 결과 : -128

 

 

저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] 제어문 (조건문 / 반복문 / 제어키워드)  (0) 2022.07.08
[Java] 연산자  (0) 2022.07.07
[Java] 리터럴 (Literal)  (0) 2022.07.05
[Java] 변수  (0) 2022.07.04
[Java] Java - 미완  (0) 2022.07.04
    'Langauge/Java-basic' 카테고리의 다른 글
    • [Java] 제어문 (조건문 / 반복문 / 제어키워드)
    • [Java] 연산자
    • [Java] 리터럴 (Literal)
    • [Java] 변수
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바