[자바] int 와 Integer? string 과 String? 의미없이 사용해온 Wrapper class

쪼개발자·2024년 1월 10일

자바 정복

목록 보기
1/8

그러하다
나는 그냥 되는대로 쓰던 개발자이다
올해의 목표는 자바 기초 정리를 좀 해보는 것.
쓸 줄은 아는데 설명할 줄을 모르는 멍청한 개발자는 이제 그만 두려고 한다.

그래서, 새해니까, 호기롭게 자바 강의를 듣기 시작했다.
첫 강의는 여전히 variables
'아 이건 겁나 쉽지 아 이걸 모를리가!!!?' 라는 마음가짐으로 인스타 둘러보기나 하며 무성의 하게 듣고 있다가
문득, 아 그럼 int와 Integer의 차이를 내가 "제대로" 설명할 수 있는가에 대한 의문이 들었다. 그래서 이 글을 쓰게 되었다 ^.^...

기본형(Primitive) vs 래퍼클래서(Wrapper Class)

기본형

  • byte, string, char, short, int, long, float, double (8가지)
  • Stack 메모리 공간에 저장

래퍼클래스

  • Integer, Boolean, String, Character...
  • 기본형을 클래스형으로 만든 것
  • Heap 메모리 공간에 저장

래퍼클래스의 특징

  • 기본형의 경우 값을 비교하지만, 참조형의 경우 '주소' 를 비교
    즉, 값을 비교하는 경우 == 사용 할 수 없음, equals를 사용해야 합니다.
Integer a = 1; 
Integer b = 1; 
a == b  => false

2) 불변 -> 기존값을 변경할 수 없음.

3) String은 조금 특별한 래퍼클래스 == / equals 둘 다 사용가능

  • 리터럴로 생성하는 경우(String a = "abcd") intern()함수가 호출되어 값이 Heap String pool에 저장됨. 이 경우 == 으로 비교가능
  • new String("abcd")으로 생성하는 경우, Heap에 저장됨. 그러므로
    new String("abcd") == "abcd"는 같지 않는 값으로 여겨짐.

참조
https://www.youtube.com/watch?v=eqltmFST-N8

래퍼클래스를 도대체 왜 써야하는데?

  • 형 변환이 쉽다.
  • null 비교가 용이하다(기본값이 null)

래퍼클래스와 꼭 함께 나오는 박스와 언박싱

  • 박싱은 말그대로 기본형을 객체로 만드는 것
  • 언박싱은 객체형을 기본형으로 만드는 것

래퍼클래스 - Call by Value

0개의 댓글