본문 바로가기

Java

[혼자 공부하는 자바] 5-1 참조 타입과 참조 변수

728x90

1. 기본 타입과 참조 타입

▶기본타입

byte, char, short, int long, float, double, boolean변수

실제 값을 변수 안에 저장

 

▶참조타입

배열, 열거, 클래스, 인터페이스 변수로 메모리의 번지를 변수 안에 저장함

번지를 통해 객체를 '참조한다' 따라서 참조타입

 

cf) String(문자열) 클래스도 번지를 통해 객체를 참조하기 떄문에 참조타입 변수에 해당

 

 

 

2. 메모리 사용영역

▶ 메소드(Method) 영역

JVM시작 시 생성되고 모든 스레드가 공유하는 영역

사용되는 클래스들을 클래스 코더로 읽어 클래스별로 정적필드 / 상수 / 메소드 코드 / 생성자 코드 등을 분류해서 저장

 

▶ 힙(Heap) 영역

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

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

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

 

▶JVM 스택 영역

메소드 호출할 때마다 프레임을 추가(push) 메소드가 종료되면 해당 프레임을 제거하는 동작 수행(pop)

메소드 내에서 정의하는 기본 자료형에 해당되는 지역 변수의 데이터 값이 저장되는 공간

 

 

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

▶ ==, !=

동일한 객체를 참조하는지(==), 다른 객체를 참조하는지(!=) 알아볼 때 사용

참조 타입 변수의 값은 힙 영역의 객체주소이기 때문에 ==, !=로 번지 값을 비교하는 것

동일 번지 값을 가진다 = 동일 객체를 참조한다.

 

 

4. null과 NullPointerException

▶ null

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

null값도 초기값으로 사용 가능

 

▶ NullPointerException 예외

참조 변수를 사용하면서 가장 많이 발생하는 예외 중 하나로 참조 타입 변수를 잘못 사용하면 발생함

null상태에서 있지도 않은 객체의 데이터나 메소드를 사용하는 코드 실행 시 발생

참조하는 객체가 없을 때 발생하기 때문에 참조 변수를 추적해서 객체를 참조하도록 수정

 

 

5. String 타입

▶String

String 변수 우선 선언 하고 문자열 저장

String은 문자열 리터럴로 생성하는지, new 연산자로 생성하는지에 따라 비교 연산자 결과가 달라질 수 있음

내부 문자열을 비교하고 싶을 때는 equals()메소드 이용

 

728x90