원시타입과 참조타입 변수
원시타입 :실제 값 만을 저장하는 공간으로 스택 메모리 영역에 저장됩니다.
기본값이 있기 때문에 Null이 존재 하지 않고 만약 기본형 타입에 Null을 넣고 싶다면 래퍼 클래스를 활용합니다.
참조타입: 스택에 저장되어 있는 실제 값의 주소를 저장하는 곳으로 힙 메모리 영역에 저장됩니다.
원시 타입은 스택메모리에 원본값이 저장되지만 참조현은 주소값을 저장하는 주소형 변수입니다 원본값은 힙 영역에 저장이 됩니다
heap 영역은 동적으로 할당되는 메모리 이기때문에 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장합니다
메모리 크기는 참조 변수 자체의 크기, 즉 객체 자체에 대한 주소값을 저장하는 변수의 크기 주의주의 !!
래퍼클래스란
8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스(Wrapper class)라고 합니다.
래퍼클래스를 사용하는 이유
형변환과 비교연산을 하기 위해 사용한다
int value = 10;
Integer wrapperValue = value;
byte byteValue = wrapperValue.byteValue();
short shortValue = wrapperValue.shortValue();
//형변환
int value = 3;
Integer IntegerValue = value;
Integer IntegerValue2 = value;
System.out.println(IntegerValue == IntegerValue2);// == 비교가 객체 메모리 주소를 비교하는것 값이 아니라
System.out.println(IntegerValue.equals(IntegerValue2));//true
//비교연산 equals를 사용한다
//출력결과 true true 인데 객체 메모리주소가 동일하냐 실제 값이 동일하냐 차이임 헷갈리면 큰일난다 !
박싱과 언박싱 / 오토 박싱과 오토 언박싱
기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱(Boxing)이라고 합니다.
래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정을 언박싱(UnBoxing)이라고 합니다.
JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 처리를 해준다 // 오토 ~
int intValue = 100;
Integer integerValue = Integer.valueOf(intValue);
// int 값 100을 Inter 객체 integerValue 로 변환
// valueOf() 로 박싱 가능
int unboxingValue = integerValue.intValue();
// integer 객체인 unboxingValue를 intValue()를 사용하여 언박싱
Integer IntegerValue02 = intValue; // 오토 박싱 int-> Integer로 자동
int unboxingValue02 = IntegerValue02; // 오토 언박싱 Integer 객체를 int로
오토박싱과 오토언박싱은 자바의 편리한 기능이지만, 성능과 안정성을 고려하여 사용하는 것이 좋습니다. 기본형 타입과 객체 타입 간의 명시적인 변환이 필요한 상황에서는 수동 박싱/언박싱을 고려하는 것이 좋습니다.
내부적으로 개발자는 보이지 않는 변환과정이 추가되기 때문에 오 개꿀 하고 쓰는경우가 없어야 한다
'언어 > JAVA' 카테고리의 다른 글
if문 가위 바위 보 (0) | 2024.07.10 |
---|---|
입출력 (0) | 2024.07.09 |
JDK 설치 (0) | 2024.07.09 |
JVM (0) | 2024.07.08 |
자바의 역사와 특징 (0) | 2024.07.08 |