[Java]기본형(primitive type)과 참조형(reference type) (feat.Integer와 int 차이점)
오늘은 Java 기본형(primitive type)과 참조형(reference type) 종류 및 특징,사용 이유에 대해 시작하겠습니다.
자바는 크게 기본형(primitive type), Wrapper Class 참조형(reference type)으로 나눠진다.
Primitive(프리머티브) 자료형(기본형 타입)
종류
byte
short
int
long
float
double
char
boolean
void
이것들을 Primitive 자료형이라 부른다.
특징
모두 첫 글자가 소문자
산술 연산이 가능함.
null로 초기화 할 수 없음.
int a = null; (x)
int a = 0; (o)
Wrapper 클래스(포장 클래스)
종류
Byte
Short
Integer
Long
Float
Double
Charater
Boolean
Void
특징
모두 첫 글자가 대문자
산술 연산 불가
null로 초기화 할 수 있음.
DB와 연동시 DTO 객체에 null이 필요한 경우 사용 할 수 있음
사용 이유
1. 매개변수로 객체가 요구 될때.
2. 기본형 값이 아닌 객체로 저장해야 할 때.
3. 객체간의 비교가 필요할 때.
그리고
Boxing과 Unboxing의 개념을 알아야 합니다.
Boxing
개념
Primitive 자료형 -> Wrapper 클래스
기본형 자료형을 포장 클래스로 변환한다.
int primitive_age = 30;
Integer wrapper_age = new Integer(primitive_age);
Unboxing
개념
Wrapper 클래스 -> Primitive 자료형
포장 클래스를 기본형 자료형으로 변환한다.
Integer wrapper_age = new Integer(30);
int primitive_age= wrapper_age.intValue();
정리
객체 박스(Wrapper 클래스)에 정수를 담는다. (Boxing)
박스에 담겼으니 그 안에 내용물을 바꾸는건 불가능하다.
바꾸려면 박스에서 내용물을 꺼낸다. (Unboxing)
내용물을 다시 꺼냈으니 바꾸는게 가능해짐.
Integer - Wrapper 클래스
int - 기본 자료형
여기서 잠깐!
Integer obj = new Integer(61);가 아니라
Integer obj = 61;로 해도 61 정수가 자동으로 박스에 담긴다.
이건 무엇일까??
[JDK 1.5 버전 이후 사용 가능]
그것이 바로 AutoBoxing과 AutoUnBoxing 기능이다.
AutoBoxing
개념
int num1 = 61;
Integer obj = num1;
int num1의 값을 Integer 객체에 넣기 위해서는(Boxing) new Integer(num1) 과 같이 객체를 생성해야 하지만,
위와 같이 대입하면 AutoBoxing이 자동으로 진행된다.
AutoUnBoxing
개념
Integer obj2 = new Integer(69);
int num1 = obj2;
Integer 객체에 있는 int 값을 가져오기 위해서는(UnBoxing) obj2.intValue() 메소드를 사용하여 가져와야 하지만,
위와 같이 int 형 변수에 Integer 객체를 대입하면 자동으로 UnBoxing이진행된다.
주의 할 점
AutoBoxing과 AutoUnBoxing 은 단지 기본형 타입과 상응하는 Wrapper class에만 일어난다.
다른 경우에 대입을 시도하면 컴파일 에러가 발생한다.
- Integer는 intValue(), Double은 doubleValue() 등만 AutoBoxing과 AutoUnBoxing이 발생한다.
Double obj = 3.14;
int num1 = obj.intValue() ; (O)
int num1 = obj; (X)
* Wrapper 클래스의 기본 메소드들
메소드 |
반환값 |
설명 |
booleanValue() |
boolean |
기본형 데이터를 문자열로 바꾼 뒤에 반환 |
byteValue() |
byte |
객체의 값을 byte 값으로 변환하여 반환 |
doubleValue() |
double |
객체의 값을 double 값으로 변환하여 반환 |
floatValue() |
float |
객체의 값을 float 값으로 변환하여 반환 |
intValue() |
int |
객체의 값을 int 값으로 변환하여 반환 |
longValue() |
long |
객체의 값을 long 값으로 변환하여 반환 |
shortValue() |
short |
객체의 값을 short 값으로 변환하여 반환 |
Wrapper class 객체에서 해당 메소드를 사용은 형변환이 가능한 메소드만 사용이 가능하다.
+추가
Integer.parseInt("100") , Integer.valueOf("100") 이 둘의 차이점이 헷갈린다면 참고
'java' 카테고리의 다른 글
[Java] LocalDate,LocalTime,LocalDateTime 총 정리 (10) | 2019.11.13 |
---|---|
[Java] Error(에러)와 Exception(예외) 그리고 자주 보이는 Exception (0) | 2019.11.06 |
[Java] 오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2019.10.30 |
[Java] parseInt()와 intValue() (0) | 2019.10.29 |
[Java] java.lang.ClassCastException (0) | 2019.10.28 |