Java 참조 타입과 참조 변수

김범준·2022년 11월 9일
0

Java

목록 보기
5/11
post-thumbnail

Java에 변수를 크게 2가지로 나눌 수 있다.
기본 타입과 참조 타입.
이 둘의 차이는 JVM내에서 해당 변수가 스택영역에 저장되는지, 힙 영역에 저장되는지다.

JVM내에서 기본타입은 스택에 저장되며 참조 타입의 경우, 해당 값이 아닌 객체의 주소가 저장된다. 때문에 해당 값을 찾으려면 연산이 더 필요하다.
때문에 쓸 수 있으면 기본타입을 사용하는것이 시간과 메모리 효율이 좋다.

그렇다고 참조를 아예 쓰지 말라는 뜻이 아니다.
참조타입의 경우 기본타입에서 못쓰는 Null값을 가질 수 있으며, 제네릭타입으로 사용이 가능하다.

여기서 제네릭타입이란 ArrayList<Integer>에 Integer처럼 내부에서 지정되는 것이 아닌 외부에서 지정하는 타입을 말한다.

기본 타입

기본타입을 크게 정수 타입, 실수 타입, 논리 타입 이 3가지로 나눌 수 있다.

정수 타입

정수타입은 byte, char, short, int, long으로 구성된다. 가장 많이 사용되는 타입이다.
해당 링크안에 있는 Integer은 참조 타입이다.

실수 타입

실수 타입은 두가지 float과 double가 있다. 이둘의 경우 오차가 발생할 수 있으므로 유의해야 한다.

논리 타입

논리 타입은 boolan 하나로 값이 true, false 이 두가지로 구성되어 있다.
보통 if문 사용시에 사용한다.,

boolean var1 = true;

참조 타입

위 기본 타입을 제외한 타입이 전부 참조 타입이다.
위에서도 말햇지만, 참조타입은 힙영역을 사용하며, 스택에는 해당 객체의 주소가 저장된다. 때문에 기본 타입보다 속도면이나 공간면이나 효율이 낮다.
하지만 사용처에 따라 매애애애우 유용하니 '절대 쓰지 말자' 이런말은 아니다.

연산

일단 기본적으로 참조타입의 경우 기본타입과 연산이 다르다.
몇몇 참조타입은 +등의 사칙연산이 안되는 경우도 있으며,
==같은 경우 해당 값이 아닌 같은 객체인지 비교하므로 원치않은 결과가 날 수 있다.

Null

기본타입의 경우 Null형태를 가질 수 없다.
참조타입은 Null을 가질 수 있다.

Gabage Collection

가비지 컬렉션은 말그대로 쓰레기를 수집하는 것을 말한다.
여기서 말하는 쓰레기란 힙영역에 생기는 사용할수도, 사용되지도 않는 공간을 말하는데 이를 다시 사용하기 위해 해제하는 역할을 한다.
이게 왜 참조타입에서 언급하냐면, 힙영역을 더럽히는 타입은 참조타입뿐이기 때문이다.

사실 가비지 컬렉션은 해제될 영역을 보고 진행하는 것이 아닌 해제되면 안될곳을 체크하고 나머지를 밀어버린다.

profile
그럴싸한 계획을 가지고 있는

0개의 댓글