Claire's Study Note

05-1. 참조 타입과 참조 변수

by Hi.Claire
반응형

📓 혼자 공부하는 자바 (신용권, 한빛미디어)

 

CH05. 참조 타입

05-1. 참조 타입과 참조 변수

05-1-1. 기본 타입과 참조 타입

기본 타입(primitive type) 변수는 실제 값을 변수 안에 저장한다.

참조 타입(reference type) 변수는 메모리의 번지를 변수 안에 저장한다.

 

05-1-2. 메모리 사용 영역

메소드 영역(method area)

코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스별로 정적 필드(static field)와 상수(constant), 메소드 코드, 생성자(constructor) 코드 등을 분류해서 저장한다.

 

힙 영역(heap area)

객체와 배열이 생성되는 영역

여기에서 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.

만약 참조하는 변수나 필드가 없다면 의미 없는 객체가 되고, JVM은 이를 쓰레기로 취급해 garbage collector로 제거한다.

 

JVM 스택 영역

메소드를 호출할 때마다 frame을 추가(push)하고 메소드가 종료되면 해당 frame을 제거(pop)하는 동작을 수행한다.

frame 내부의 로컬 변수 스택에는 기본 타입 변수와 참조 타입 변수가 push 되거나 pop 된다.

스택 영역에 변수가 생성되는 시점은 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때이며, 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.

기본 타입 변수는 스택 영역에 직접 값을 가지고 있지만, 참조 타입 변수는 스택 영역에 힙 영역의 객체 주소를 가진다.

 

05-1-3. 참조 변수의 ==, != 연산

기본 타입 변수의 ==, != 연산은 변수의 값이 같은지, 아닌지를 조사한다.

참조 타입 변수의 ==, != 연산은 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼 때 사용된다.

 

05-1-4. null과 NullPointerException

참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있다.

null 값도 초기값으로 사용될 수 있다.

 

NullPointerException

참조 변수가 null 값을 가지고 있을 경우에는, 참조 객체가 없으므로 변수를 통해 객체를 사용할 수 없다.

만약 null 상태에서 있지도 않은 객체의 데이터(필드)나 메소드를 사용하는 코드를 실행하면 NullPointerException이 발생한다.

-> 해결 방법 : 참조 변수를 추적해서 객체를 참조하도록 수정한다.

 

05-1-5. String 타입

자바에서는 문자열은 String 객체로 생성되고 변수는 String 객체를 참조한다.

 

자바는 문자열 리터럴이 동일하다면 String 객체를 공유한다.

새로운 String 객체를 생성하고 싶으면 new 연산자를 사용한다.

 

new 연산자(객체 생성 연산자)

힙 영역에 새로운 객체를 만들 때 사용하는 연산자

 

내부 문자열이 동일한지 비교하고 싶을 때에는 String 객체의 equals() 메서드를 사용한다.

 

(예제)

String name1 = "무미니";
String name2 = "무미니";
String name3 = new String("무미니");

System.out.println(name1 == name2);
System.out.println(name1 == name3);
System.out.println(name1.equals(name2));
System.out.println(name1.equals(name3));

 

true

false

true

true

반응형

'☕️ Java > 혼자 공부하는 자바' 카테고리의 다른 글

06-5. 인스턴스 멤버와 정적 멤버  (0) 2023.09.13
06-4. 메소드  (0) 2023.09.13
06-3. 생성자  (0) 2023.08.30
06-2. 필드  (0) 2023.08.30
06-1. 객체 지향 프로그래밍  (1) 2023.08.30

블로그의 정보

Claire's Study Note

Hi.Claire

활동하기