⚡ 개요
개발에 대해서 어느정도 한다고 생각했지만 기본이 너무 부족하다는것을 깨닫고 CS 기본적인 내용에 대해서 정리를 하면서 다시 한번 공부중이다.
⚡ 기본
java 기본 타입 : int, long, float, double, char, short, byte, boolean
java Wrapper 클래스 : Integer, Long, Float, Double, Character, Short, Byte, Boolean
⚡ 개념 및 내용 정리
오토박싱과 오토 언박싱은 자바에서 데이터 타입을 변환하는데 사용되는 개념이다.
오토박싱
기본 데이터 타입의 값을 해당 래퍼 클래스의 객체로 자동으로 변환하는 것을 말한다. 예를 들어 int 타입의 변수를 Integer 타입으로 할당하면 자동으로 오토박싱이 발생한다.
오토 언박싱
오토박싱의 반대 개념으로 래퍼 클래스의 객체를 해당 기본 데이터 타입으로 자동으로 변환하는 것을 말한다다. 예를 들어 Integer 타입의 객체를 int 타입으로 할당하면 자동으로 오토 언박싱이 발생한다.
// 오토박싱 예제
int i = 10;
Integer integerObj = i; // int 타입의 값을 Integer 객체로 자동 변환
// 오토 언박싱 예제
Integer integerObj2 = 20;
int j = integerObj2; // Integer 객체의 값을 int 타입으로 자동 변환
⚡ 성능
사실상 성능 문제 때문에 내용을 정리했다고 생각해도 과언이 아니다. stream을 사용할때도 내부적으로 오토 박싱이 일어나고 이로 인해서 잘못 사용하는 경우 일반적은 반복문 보다 성능이 나오지 않는 경우가 발생한다...
❗ 기본 타입 및 Wrapper 클래스의 비교
Wrapper 클래스의 값을 비교할 때는 equals() 메서드를 사용해야 한다. 이는 값의 비교가 아닌 객체의 비교를 수행하므로성능 저하가 발생할 수 있다. 따라서 기본 타입의 값을 비교할 때는 == 연산자를 사용하는 것이 좋다.
❗ 오토박싱과 오토언박싱 성능
오토박싱을 사용할 경우 기본 타입의 값을 Wrapper 클래스 객체로 변환하는 과정에서 새로운 객체가 생성된다. 이 과정에서 메모리 할당 가비지 컬렉션 등의 부하가 발생하므로 성능 저하가 발생할 수 있다.
/* 간단한 예시 */
ist<Integer> list = new ArrayList<>();
list.add(1); // 오토박싱 발생
int num = list.get(0); // 오토 언박싱 발생
위 코드에서는 기본 타입인 int 값 1이 Wrapper 클래스인 Integer 객체로 자동으로 변환되어 ArrayList에 추가된다. 이 과정에서 새로운 객체가 생성되므로 성능상의 부담이 발생할 수 있다.
추가적인 속도에 대한 테스트는 해보지 않았지만 데이터가 적다면 성능적으로 신경을 쓰지 않아도 되는 부분이다. 하지만 데이터가 많고 해당 작업 뿐만 아니라 다른 작업도 한다면? 한번쯤은 고려하고 이부분에서 만큼은 속도를 조금이라도 줄여야 하지 않나 생각한다.
내가 기본기를 공부하는 가장 큰 이유중 하나는 개발 소스에 대한 개선이다. 기본기가 많이 부족해서 사용할줄은 알지만 최선의 방법인지는 알지는 못한다. 공부를 하면서 어떻게 동작하는지에 대해서 공부를 하다보면 충분히 개선을 할때 최선의 방법을 찾을수 있다고 생각하고 있다.
'CS' 카테고리의 다른 글
[CS] web 개발 기본 지식 정리 (MPA, SPA, SSR, CSR) (0) | 2023.06.25 |
---|---|
[CS] 업캐스팅 & 다운 캐스팅에 대한 내용 정리 및 사용 이유 (0) | 2023.01.24 |
[Git] git -f 명령어 위험성 공유 (0) | 2022.10.23 |
네트워크에 대한 기본 개념 정리 (0) | 2022.10.12 |
HTTPS 개념 및 내용 정리 (0) | 2022.10.08 |