[JAVA] #1 자바의 자료형

대복·2025년 5월 5일

JAVA

목록 보기
2/6
post-thumbnail

기본 자료형

JAVA의 기본 자료형(Primitive Types)은 다음 8가지이다

종류자료형크기예시
정수형byte1 byte-128 ~ 127
short2 bytes-32,768 ~ 32,767
int4 bytes-2^31 ~ 2^31-1
long8 bytes-2^63 ~ 2^63-1
문자형char2 bytes'\u0000' ~ '\uffff' (유니코드)
실수형float4 bytes32bit 부동소수점
double8 bytes64bit 부동소수점
논리형boolean1bit(논리적 의미)true / false
  • 이외의 자료형은 모두 참조형이다.
  • 실수 뒤에 f가 붙어있으면 float, 없으면 double
  • 자바는 5를 기준으로 반올림이다.(5이상 올림, IEEE 754 표준)

var

JAVA 10부터 도입된 지역 변수 타입 추론 키워드다.

  • 한번 초기화된 타입은 컴파일 타임에 고정(자바는 기본적으로 정적 타입 언어이기 때문)
  • JS처럼 막 바뀌지 않는다.
var a = 10; // int로 추론됨
a = "hello"; // ❌ 컴파일 에러



묵시적 형변환

기본적으로 작은 범위 -> 큰 범위로 자동 형변환이 발생

long은 8byte고 float는 4byte인데 왜 더 크다고 인식되는가?
=> 이는 long의 표현 방식과 float의 표현방식의 차이가 나서 그렇다.

long(정수 표현)은 첫 1bit를 부호로, 나머지는 숫자를 표현하는 bit로 사용된다.
반면 float(부동소수점 방식)는 부호 1bit + 지수 8bit + 숫자 23bit로 기록되고, 지수는 우리가 아는 제곱이다.
=> 숫자 2^n으로 기록한다는 소리이다.
그러므로 float의 범위는 long보다 커지게 되고 묵시적 형변환이 가능해지는 것이다.
예: Float.MAX_VALUE ≈ 3.4
10^38 > Long.MAX_VALUE ≈ 9.2 * 10^



String

String은 객체(참조형)이며, 불변이다.(문자열 공유 중, 데이터가 변경될 위험이 없다는 것이 장점)

String str = "Hello";
str += " World";  // 새로운 문자열 객체가 생성되고 str이 그것을 참조함
String str1 = null; // str1은 아무 객체도 참조 하지 않았다.
String str2 ; // 선언만 함, 초기값이 없음 => 사용 전 초기화 필수

str1과 str2는 다르다.
1. str1 = null;

  • 정의 + 초기화 완료
  • str1은 명시적으로 "아무 객체도 참조하지 않음(null)"을 가리킴.
  • 참조형 변수는 기본적으로 객체의 주소값을 담는데, 이 경우 주소값 대신 null 리터럴을 가지고 있음.
  • 즉, "알고는 있으나 아무 것도 가리키지 않음" 상태임.

=> 이 상태에서 str1.length() 등 호출하면 NullPointerException 발생.

  1. String str2;
  • 변수는 선언되었지만 초기화되지 않음
  • 이 상태로는 컴파일조차 안 됨 (지역 변수 기준)
  • 즉, "아직 어떤 값도 부여된 적 없음" 상태임
  • 자바는 지역 변수에 대해 초기화를 강제하기 때문에, str2를 그대로 쓰면 컴파일 에러가 발생함.
구분의미사용 가능 여부예외 여부
str1 = null;명시적 null 참조사용 가능 (컴파일 가능)런타임에 NPE 발생 가능
String str2;선언만 됨 (초기화 안 됨)사용 불가능 (컴파일 에러)예외 전에 컴파일 실패


Wrapper Class

아까 나온 기본 자로형을 객체로 포장한 Wrapper Class가 있다.

  • 자바는 객체 기반 언어이고, 여러 곳에서 객체로 타입을 다뤄야 하는 상황 발생(ex: 컬렉션, 제네릭)
  • 기본형 → 객체로 포장하는 것(Boxing)
  • 객체 → 기본형 값으로 꺼내는 것(UnBoxing)
  • JAVA 5 부터 자동 박싱/언박싱을 지원
기본형래퍼 클래스
intInteger
byteByte
shortShort
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
profile
컴퓨터를 좋아합니다

0개의 댓글