[NHN Academy]

[참조 타입]

jnk1m 2022. 7. 19. 11:15

참조 타입의 초기값은 null

 

값 타입과 참조 타입 비교

값 타입(Value Type)

-데이터를 직접 포함

-복사된, 직접 가지는 데이터를 저장

: 자바에서 제공하는 8개의 기본 데이터 타입. 값 타입 변수는 단순하게 동작하며 선언된 변수는 변수 자체에 저장된다. 

 

참조 타입 (Reference Type)

-데이터(객체)가 있는 곳의 위치를 저장

-데이터는 분리된 메모리 영역에 저장됨

: 데이터 자체가 아닌, 데이터가 저장된 곳의 위치 값을 저장한다. (분리된 메모리 공간)


참조 타입 변수의 선언과 해제

선언

BankAccount account;

account = new BankAccount();

account.accountNumber = 1;

account.ownerName = "Dave";

 

해제

account = null;

 

- 값 타입일 경우 초기 값 0,false 등 기본 값이 할당 되지만 참조 타입인 경우는 참조 없음 (null)로 할당된다. 

- new 연산자를 사용하여 참조 타입 변수를 초기화한다. new 연산자는 새 객체를 생성하고 객체가 존재하는 곳의 참조를 return한다. 

 


초기화 되지 않은 참조 타입 변수

초기화 되지 않은 참조 타입 변수를 참조하려하면 멤버나 변수에 액세스 할 수 없음.

-선언된 참조 변수가 유효한 참조를 가리키도록 초기화된 경우만 참조 변수를 통해 개체의 멤버에 액세스 가능

-초기화 되지 않아 유효하지 않은 변수는 멤버 변수, 메서드에 액세스 불가

-초기화되지 않은 참조 타입에 액세스하면 NullReferenceException 예외 발생 

 


값 타입의 비교와 참조 타입의 비교

값 타입 비교

: 연산자 ==, !=를 이용하여 변수의 값을 비교한다 

참조 타입 비교

String의 경우 ==, != 연산자는 두 참조 타입 변수가 동일한 객체를 참조하는지 주소를 비교하고 값을 비교하지 않는다. 값을 비교하려면 equals를 사용해야 함. 

 

String a = new String("Dave");

String b = new String("Dave");

스택에 a,b가 생기고 힙 영역에 각각 a,b영역이 따로 생성 되서 스택에 있는 변수 a,b는 각각의 주소값을 가리키게 된다. 

 

String a = "Grohl";

String b = "Grohl";

스택에 변수 a,b가 할당되고 힙에 스트링 풀 영역이 생성됨. 그 안에 문자열이 들어가고 같은 문자열인 스트링 a,b는 같은 주소를 가리키게 된다. 

 


같은 객체에 대한 여러 변수의 참조