Java
[Java] Boxing을 지양하자.(feat primitive type vs reference type)
코리늬
2021. 4. 8. 14:58
모던 자바 인 액션을 공부하는 요즘 왜 자바에 더 집중하지 않았는가에 대한 자아성찰을 많이 하는 중이다.
흔히 말하는 Boxing, unBoxing은 다들 알고있다고 생각한다.
간단하게 말해서, Wrapper Class를 사용해서 primitive Type을 reference Type으로 변환하는 과정을 박싱(Boxing), 이 반대의 과정을 언박싱(unBoxing)이라고 한다.
자바에서는 오토박싱 기능을 제공해주기도한다.
그렇다면 왜 Boxing을 지양해야할까?
결론부터 말하자면, 비용이 추가적으로 발생
한다.
박싱한 값(Wrapper class)은 reference Type이다. 고로 Heap 영역에 저장된다.
그렇기 때문에, primitive Type을 가져오려고할 때도 Wrpper class로 인해 메모리를 추가적으로 탐색 해야하는 과정이 필요하기 때문이다.
primitive Type은 어떻길래??
primitive Type은 Stack 영역에 저장된다.
primitive Type = Stack에서 바로 조회
boxing된 reference Type = Stack에서 조회 + Heap 영역까지 조회
위와 같은 이유로 원시타입(primitive Type)이 성능상 이점을 가져가게된다.
또한, 차지하는 메모리의 양도 reference Type이 훨씬 많다.
결론
성능에 장점이 있는 primitive Type을 우선적으로 사용하자.
하지만, 객체처럼 null을 다뤄야하거나 제네릭 타입에서 사용되어야 한다면 reference Type을 사용하자.