로운's 기술노트

[JAVA] 자료형 (FAQ포함) 본문

항해99_'22.01~04/Java

[JAVA] 자료형 (FAQ포함)

로운's 2022. 7. 29. 13:37

  자료형은 크게 '기본 자료형'과 '참조 자료형'으로 나뉜다.

자바에는 총 8가지의 '기본 자료형'이 있으며, 그 외 모든 자료형은 '참조 자료형'이다.

자료형을 구분하는 이유는 저장 방식이 다르기 때문이다.

 

구분 자료형 크기
(byte / bit)
값의 범위 기본값
기본
자료형
부울대수 boolean 1 / 8 true, false false
정수 byte 1 / 8 -2^7 ~ 2^7-1 -128~127 0
short 2 / 16 -2^15 ~ 2^15-1 -32,768 ~ 32,767 0
int 4 / 32 -2^31 ~ 2^31-1 -2,147,483,648 ~ 2,147,483,647 0
long 8 / 64 -2^63 ~ 2^63-1 -9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807
0L
실수 float 4 / 32 ±(1.4E-45 ~ 3.4E38) 단정도 실수형 (유효 자릿수 : 7) 0.0f
double 8 / 64 ±(4.9E-324 ~ 1.8E308) 배정도 실수형 (유효 자릿수 : 15) 0.0(d)
문자
(정수)
char 2 / 16 유니코드 문자
(0 ~ 2^16-1)
  ‘\u0000’
참조
자료형
객체
(Object)
배열, 클래스,
인터페이스
 

 

자료형의 정확한 구분을 위해선 메모리 구조를 먼저 알아야 한다.
이는 목적에 따라 3가지 영역으로 나뉘며, (물론 '레지스터 영역'까지 4가지이나 개발자 관점에선 크게 중요하지 않음)
첫번째는 '클래스(class) 영역', '정적(static) 영역', '상수(final) 영역', '메서드(method) 영역'이라는 4가지 이름으로 불린다.
두번째는 '스택(stack) 영역'으로 변수들이 저장되는 공간이며, 세번째는 힙(heap) 영역으로 객체들이 저장되는 공간이다. 

 

 

Q. 기본 자료형과 참조 자료형의 차이는?

A. (1) 기본 자료형은 모두 소문자로 시작하는 반면, 참조 자료형은 모두 대문자로 시작한다. 

          참조 자료형이 소문자로 시작한다고 오류가 발생하지는 않지만, 개발자 간의 암묵적인 룰이므로 지키도록 한다.

     (2) 기본/참조 자료형 모두 변수의 공간이 스택 메모리에 생성된다. 그러나 기본 자료형스택 메모리에 생성된 공간에

          실제 변숫값을 저장하는 반면, 참조 자료형실제 데이터값을 힙 메모리에 저장하고, 이 힙 메모리의 위치값을 스택

          메모리에 저장한다.

     eg1. 기본 자료형 변수 복사

             int a = 3;

             int b = a;

             b = 7;

             System.out.println(a);    //  3

             System.out.println(b);    //  7

     eg2. 참조 자료형 변수 복사

              int[] a = new int[] {3, 4, 5};
              int[] b = a;
              b[0] = 7;
              System.out.println(a[0]);    //  7

              System.out.println(b[0]);    //  7

 

Q. 정수형, 실수형 자료형이 여러 개인 이유는?

A. 예를 들어, 1 ~ 5까지의 정수만을 저장하는데 long을 사용한다면, 가능은 하지만 메모리 낭비가 심할 것이다.

      이러한 메모리의 효율적인 관리를 위해 다양한 정수형, 실수형을 사용한다.

 

Q. 정수를 작은 범위의 자료형으로 캐스팅할 경우 결과는?

A. 자료형을 초과하는 정수형을 캐스팅하는 경우, 범위의 반대쪽 끝에서부터 다시 시작하는 서큘러(Circular) 구조를 보인

    다. 즉, 정수값을 작은 자료형으로 다운캐스팅하면 해당 자료형의 범위에서 반대쪽 끝인 정숫값으로 변환된다.

    eg.  byte a = (byte)128;  // -128로 변환

           byte b = (byte)129;  // -127로 변환

 

Q. 자료형의 범위는 왜 양수가 더 작을까?

A. 음수와 양수의 범위는 동일하다. 그러나 0이 양수로 속하게 되어 결국 양수 값에는 -1이 붙게 된다.

      eg.  byte의 음수 : -128 ~ -1  // 128개

             byte의 양수 : 0 ~ 127  // 128개

 

Q. 캐스팅(Casting)이란?

A. 캐스팅은 형변환을 의미한다. 즉 좌변의 자료형에 맞게 우변의 형을 변형하는 것.

    - 업캐스팅(UpCasting) : 하위 클래스의 정보를 담을 수 있는 객체에 상위 클래스의 자료형을 부여하여 상위 클래스처럼

                                          사용하게 하는 것

    - 다운캐스팅(DownCasting) : 하위 클래스의 정보를 담을 수 있는 객체의 자료형이 상위 클래스로 전환되어 있던 것(업

                                                  캐스팅된 객체)을 다시 되돌리는 것을 의미

 

 

# 참고

이지스 퍼블리싱 - 자바 완전정복

 

https://whatisthenext.tistory.com/146

 

단정도(single precision), 배정도(double precision)이란?

부동소수점 개요 처음 C언어를 공부할 때 가장 어리둥절했던 부분이 이 부분인 듯 하다. 처음에는 왜 이걸 배우지? 라는 생각을 했지만 컴퓨터구조론에서 컴퓨터가 실수를 다루는 방식에 대해서

whatisthenext.tistory.com

 

https://cafecoder.tistory.com/entry/15-%EC%9E%90%EB%A3%8C%ED%98%95%EC%9D%98-%EB%B2%94%EC%9C%84%EB%8A%94-%EC%99%9C-%EC%9D%8C%EC%88%98%EA%B0%80-%EB%8D%94-%EB%84%93%EC%9D%84%EA%B9%8C-byte-128-127

 

1.5 자료형의 범위는 왜 음수가 더 넓을까? (byte : -128 ~ 127)

취업 준비를 하며 복습한다는 마음으로, 이것을 보는 누군가에게 도움이 되었으면 하는 마음으로 Java-Tutoral을 작성해 봅니다. 입문서와 순서가 잘못되었을 수 있고, 제가 아는 정보가 틀렸을 수

cafecoder.tistory.com

 

https://velog.io/@smallcherry/Java-UpCastingAndDownCasting

 

[Java] 업캐스팅과 다운캐스팅

어떠한 자료형/클래스의 변수/객체를 만든다는 것은, 좌변의 자료형이 요구하는 정보를 모두 우변이 갖추었을 때 가능한 것이다.캐스팅은 형변환을 의미하는데 이 형변환 또한, 위에 맞춰서 생

velog.io

 

'항해99_'22.01~04 > Java' 카테고리의 다른 글

[JAVA] 메서드_타입 변환  (0) 2022.08.02
[JAVA] 배열_객체 생성 및 출력  (0) 2022.08.02
[JAVA] 배열_선언 방법  (0) 2022.08.01
Comments