int vs Integer

cutiepazzipozzi·2023년 2월 15일
2

지식스택

목록 보기
1/35
post-thumbnail

이게 절대 끝이 아니다!!!!!!!!!!!
계속 내용에 살을 붙일거다!!!!!!!

Primitive 자료형 VS Wrapper 클래스

제목을 다른 말로 바꿔보자면 위와 같다.

자료형

자료형변수의 타입에 따라 값이 저장된 공간의 크기와 저장 형식을 정의하는 역할을 한다.
(여기서 변수는 값을 저장할 수 있는 메모리 상의 공간)
자료형은 2가지로 나뉜다.

  1. 기본형(primitive) => int => 말 그대로 그 을 저장하는
    (ex. int, long, char, byte)
  2. 참조형(reference) => Integer => 주소값을 저장
    (ex. class, interface)

기본형, 참조형 변수의 정확한 차이

아직 호구마인 나는, 값과 주소값이 도대체 어디에 저장되는지 좀 궁금했다. 그래서 또 찾아봤다. 아니 참조형은 말 그대로 주소값에서 값을 '참조'해와서 참조형인건지 뭔가 궁금하기도 했고..?
이래서 객프 수업을 더 열심히 들었어야 해

기본형 변수 선언
int val = 10
참조형 변수 선언
Integer val = new Integer(10)

이렇게 두개를 선언했다고 치면 값이 어떻게 저장될까?

자바 메모리 영역은 method(static) -> stack -> heap 영역으로 나뉜다.

여기서 stack영역은 런타임 시 메서드 내에서 생성된 기본형 변수 값(지역변수, 매개변수)을 저장해준다. 메서드가 호출될 때 할당되고 종료하면 그대로 사라진다. 따라서 위에서 선언한 val, 즉 10은 이곳에 val이라는 이름으로 4바이트 영역에 저장된다.

heap 영역은 런타임시 동적으로 할당되는 영역으로, 참조형 변수 및 배열이 이곳에 저장된다. 마찬가지로 위에서 선언한 참조형 변수 val도 stack 영역에 저장되지만, 그 안에는 주소값이 저장된다. 그 주소값을 찾아 heap으로 들어가면 원하는 주소 안에 10이라는 값이 저장돼있다.
(new라는 명령어는 heap에다가 주어진 주소에 값을 저장할 새로운 공간을 만들라고 지시한다)

연관성

기본타입을 객체로 표현하기 위해 사용되는 클래스가 java.lang에 있는 wrapper 클래스이다.

언제 사용되냐구?

  1. 매개변수가 객체로 필요할 때
  2. 기본값이 아닌 객체로 저장이 필요할 때
  3. 객체 간의 비교가 필요할 때

그렇다면 wrapper 클래스로 왜 사용하는가?

  1. 기본 자료형을 객체로 변환할 수 있다.
    (메서드에 전달된 인자를 수정할 때 객체가 필요)
  2. 거의 모든 패키지의 class는 generic type을 인자로 받는다.
  3. collection 프레임 워크의 자료 구조는 객체만 저장할 수 있으며, 이 wrapper 클래스를 활용해 언박싱, 자동 박싱을 한다.
    (Boxing : 기본->참조형 변수로 /
    ex. Integer num = Integer.valueOf(1))

** 최근(Jdk 1.5이후)에는 AutoBoxing, unBoxing이 가능해짐!
따라서 ex. Integer num = 1로 써도 무리가 없음

차이점

  • Primitive data type (기본 자료형)
    - 상술 연산이 가능하다.
    - null로 초기화 X (객체가 아니므로 기본값을 가져야함)
    -변수의 선언과 동시에 메모리가 생성됨
  • Wrapper class
    - unboxing을 하지
    - 산술 연산 X
    (인스턴스에 저장된 값을 변경할 수 없어 새로운 인스턴스를 생성해야 함. 그래서 내부 값을 비교할 때 주소값을 사용하는 ==, != 연산자를 사용할 수 없고 참조를 비교해야 하므로 equals를 사용해줘야 한다
    -> String이 두 문자열을 비교할 때 str1.equals(str2)를 해준 이유가 이 때문인듯)
    - null 초기화 O

참고

https://colossus-java-practice.tistory.com/7
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EB%B3%80%EC%88%98%EC%9D%98-%EA%B8%B0%EB%B3%B8%ED%98%95-%EC%B0%B8%EC%A1%B0%ED%98%95-%ED%83%80%EC%9E%85
https://velog.io/@yh20studio/Java-%EA%B8%B0%EB%B3%B8%ED%98%95-%EB%B3%80%EC%88%98%EC%99%80-%EC%B0%B8%EC%A1%B0%ED%98%95-%EB%B3%80%EC%88%98

profile
노션에서 자라는 중 (●'◡'●)

2개의 댓글

comment-user-thumbnail
2023년 2월 15일

멋져요!!! 앞으로 자주 방문하겠습니당!

1개의 답글