[JAVA]Primitive 타입과 Reference 타입

무지성개발자·2023년 7월 16일

Primitive 타입

Primitive 타입은 int, long, boolean, double, shot, char, byte 같은 원시타입(기본타입)을 말합니다.


Primitive 타입 특징

  • boolean은 false, 나머지는 0으로 초기화 된다.

  • null을 사용 할 수 없다.

  • 변수에 값(value)를 저장.

  • 매개변수로 사용 할 때 복사된 데이터를 전달하여서 원본 데이터는 영향을 받지 않음.(Pass By Value)

  • 스택 메모리에 값이 존재.

  • 속도가 빠르다.


Pass By Value

Primitive 타입인 중 하나인 int 형의 변수 num은 sum()메소드에서 +1을 해줬지만 11번 라인을 보면 1을 그대로 찍어준다.

Primitive 타입은 변수 안의 값이 복사된 값을 넘겨 주기 때문에 원본 데이터에는 영향을 주지 않는다.


Reference 타입

Reference 타입은 Integer, Long 등 Object를 상속 받은 클래스들을 말하며 참조유형이라고 한다.


Reference 타입 특징

  • null을 사용 할 수 있다.

  • null로 초기화 되어 있다.

  • 변수에 값(value)이 아닌 값이 저장된 주소를 저장.

  • 매개변수로 사용 할 땐 값이 저장된 주소를 전달하여 값을 수정하면 원본 값이 바뀐다.(Pass By Reference)

  • 힙 메모리에 값이 존재하며, 스택 메모리에 값이 저장된 주소 값을 참조됨.

  • 값을 필요할 때마다 언박싱의 과정을 거쳐야해서 원시타입 보다 속도가 느림.


Pass By Reference

[1,2]의 값을 가진 배열 arr를 sum() 메소드를 사용하여 첫 번재 인수를 +1 했더니 원본 값이 [0,2]의 배열로 바뀐게 보인다.

Reference 타입은 매개변수로 전달할 때 저장된 주소를 전달 한다.
때문에 sum() 메소드의 매개변수 arr는 전달 받은 주소를 바라보고 있어 데이터를 수정 하면 같은 주소를 바라보고 있는 원본 데이터도 바뀌는 것 이다.


한 줄평 : Pass By Value, Pass By Reference는 반드시 구분 할 줄 알아한다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

2개의 댓글

comment-user-thumbnail
2023년 7월 16일

잘봤습니다.

답글 달기
comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기