[Java/Kotlin] Primitive vs Reference

Jay·2021년 2월 26일
0

Java&Kotlin

목록 보기
17/30
post-thumbnail

Java에는 기본형과 참조형이 있다.
서로 다른 특징이 있고 이를 잘 알아야 상황 적절하게 쓸 수 있다.

기본형 (Primitive Type)

  • 변수에 값 자체를 저장하며, stack 영역에 생성된다.
  • 사용하기 전 반드시 선언되어야 하며, 초기화 하지 않으면 자료형에 맞는 기본 값이 들어간다.
  • OS에 따라 자료의 길이가 변하지 않는다.
  • 비객체 타입이며, Null값을 가질 수 없다.
  • 종류 : 정수(int,byte, short, long), 실수(float,double), 문자(char), 논리(boolean)

참조형 (Reference Type)

  • 기본형을 제외하고선 모두 참조형이라고 부른다.
  • 메모리 상 객체가 존재하는 주소를 저장하며 heap 영역에 저장된다.
  • null 또는 주소를 값으로 갖는다.
  • 클래스형, 인터페이스형, 배열형이 있다.

참조와 참조형 변수는 다르다.

참조

  • 참조형 변수가 아닌 참조값(reference value, 해쉬코드)이다.
  • A x = new A();로 생성했을 때, new가 반환한 참조(reference)는 new A();의 반환값이고, 참조형 변수(reference value)는 x이다.

People클래스가 있다고 해보자.

public class People { 
	public int height; 
    	public int age; 
}

객체의 참조형 변수를 선언하는데, 메모리가 생성되기 전이기에 null로 초기화 해준다.

People sungHo = null; 
People chanHo = null; 
System.out.println("People의 변수 sungHo의 값은 : " + sungHo); 
System.out.println("People의 변수 chanHo의 값은 : " + chanHo);

new 연산자를 사용하여 메모리를 생성한다.

People sungHo = null; 
People chanHo = null; 

sungHo = new People(); 
chanHo = new People(); 

System.out.println("People의 변수 sungHo의 값은 : " + sungHo); 
System.out.println("People의 변수 chanHo의 값은 : " + chanHo);


메모리가 생성되면 내부 인덱스 테이블에 주소를 매핑하는 참조값이 하나씩 만들어진다.
이렇게 생성된 참조값이 참조형 변수 sungHo, changHo에 할당된다.

여기서 참조형 변수는 sungHo, changHo이며
참조는 위에서 출력된 new People()의 반환 값들이다.

Reference

profile
developer

0개의 댓글