romworld

Chapter 05-1. 참조 타입과 참조 변수 본문

JAVA/개념정리

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

inderrom 2022. 9. 14. 02:02

참조타입

자바의 타입은 크게 기본타입과 참조타입으로 분류된다.

 - 기본타입 : int, double, char, float, long, byte, short

 - 참조타입 : 배열타입, 열거타입, 클래스, 인터페이스

(참조 타입의 변수에는 객체의 번지가 저장

번지로 객체를 참조한다는 의미에서 참조 타입이라고 함)

기본타입은 변수의 값을 실제 변수안에 저장하지만,

참조타입은 값이 저장된 주소를 저장함 (대명사)

 

메모리 사용 영역

JVM은 운영체제에서 할당받은 메모리 영역을 메소드 영역, 힙 영역, 스택 영역으로 구분해서 사용한다.

메소드 영역에서는 정적 필드, 상수, 메소드 코드, 생성자 코드가 위치하며, 힙 영역에는 객체가 생성된다.

스택 영역에는 변수가 생성됨.

 

번지 비교

비교 연산자(==, !=)가 기본 타입에서 사용되면 값을 비교하지만, 참조 타입에서 사용되면 번지를 비교한다.

==이 true가 나오면 같은 객체를 참조하고 false가 나오면 다른 객체를 참조한다는 뜻

(문자열 비교는 equals()메소드 사용)

 

null

객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있다

 

NullPointerException

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

만약 null인 참조 변수를 통해 있지도 않은 객체의 필드나 메소드를 사용하면 발생된다.

 

 

// 기본타입 (소문자로 시작)
int age = 20;    //현금으로 20 가지고 있는 거고
double pi = 3.14;

// 참조타입 (대문자로 시작)
String name = "홍길동"; //통장에 가지고 있는 거 String name = new String("홍길동");
String type = "java";

기본타입 변수 테스트

int a1 = 0;
int a2 = a1;
System.out.println(a2);
a1 += 1;
System.out.println(a2);

- a2를 출력했기 때문에 0이 출력된다.

 

참조타입 변수 테스트

// Scanner, Random
ReferenceTest rt1 = new ReferenceTest();
// ReferenceTest 클래스로 하나의 객체(참조형변수)를 만든다.
ReferenceTest rt2 = rt1;
// 위에서 만든 참조형 변수를 다른 이름의 참조형 변수에 넣어준다.
System.out.println(rt1); //d_array.ReferenceTest@15db9742
System.out.println(rt2); //d_array.ReferenceTest@15db9742
// 두 참조형 변수의 주소값이 같은지 확인한다.
		
System.out.println(rt2.i);
// rt2안에 있는 int형 i의 값을 확인한다.
rt1.i += 1;
//rt1 안에 있는 int형 i의 값을 1증가시킨다.
System.out.println(rt2.i);
// rt2안에 있는 i의 값을 확인한다.
// rt1과 rt2는 같은 객체를 바라보기때문에 rt1의 값이 바뀌면
// rt2도 값이 바뀐것 처럼 보인다.

// 참조형변수는 주소를 가지고있지 않다는 의미로 null 값을 가질 수 있다.
String str1 = null;
System.out.println(str1);
// "문자열".length() : 문자열의 길이를 구하는 메서드
System.out.println(name.length());
str1 = new String ("이순신");
System.out.println(str1.length());

'JAVA > 개념정리' 카테고리의 다른 글

Chapter 05-3. 정렬, 석차 구하기  (0) 2022.09.19
Chapter 05-2. 배열  (0) 2022.09.14
Chapter 04. 조건문과 반복문  (3) 2022.09.12
Chapter 03. 연산자  (0) 2022.09.10
Chapter 02. 변수  (0) 2022.09.09
Comments