본문 바로가기
언어/JAVA

[참조 타입] 데이터 타입 분류

by 코딩맛집 2023. 1. 21.

5.1 데이터 타입 분류

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

참조 타입이란 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입이 있다.

 

기본 타입과 참조 타입의 변수의 차이점

기본 타입으로 선언된 변수 : 값 자체를 스택 메모리 영역에 저장

참조 타입으로 선언된 변수 : 번지를 스택 메모리 영역에 저장하고 힙 메모리 영역에 있는 값을 참조한다.

 

* 객체란? 데이터와 메소드로 구성된 덩어리

 

5.2 메모리 사용 영역

java 명령어로 JVM이 구동되면 JVM은 운영체제에서 할당받은 메모리 영역을 다음과 같이 구분해서 사용한다.

메소드 영역

바이트코드 파일이 저장되는 영역

 

힙 영역

객체가 생성되는 영역. 객체의 번지는 메소드 영역과 스택 영역의 상수와 변수에서 참조할 수 있다.

 

스택 영역

메소드를 호출할 때마다 생성되는 프레임이 저장되는 영역이다. 메소드 호출이 끝나면 프레임은 자동 제거된다. 프레임 내부에는 로컬 변수 스택이 있다. 여기에서 기본 타입 변수와 참조 타입 변수가 생성되고 제거된다.

 

5.3 참조 타입 변수의 ==, =! 연산

==, != 연산자는 스택 메모리에 있는 값을 조사한다. 쉽게 말하자면, 참조 타입 변수의 값은 객체의 번지이므로 참조 타입 변수의 ==, !=연산자는 번지를 비교하는 것이 된다.

 

5.4 null과 NullPointerException

참조 타입 변수는 아직 번지를 저장하고 있지 않다는 뜻으로 null 값을 가질 수 있다. null도 초기값으로 사용할 수 있기 때문에  null로 초기화된 참조 변수는 스택 영역에 생성된다.

 

자바는 프로그램 실행 도중에 발생하는 오류를 예외라고 부른다. 참조 변수를 사용하면서 가장 많이 발생하는 예외 중 하나는 NullPointerException이다. 변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려 할 때 이 예외가 발생한다.

int[] intArray = null;
intArray[0] = 10; //NullPointerException

intArray가 참조하는 배열 객체가 없으므로 10을 저장할 수 없다. 경우에 따라서는 참조 타입 변수에 일부러 null을 대입하기도 한다. 프로그램에서 객체를 사용하려면 해당 객체를 참조하는 변수를 이용해야 하는데, 변수에 null을 대입하면 번지를 잃게 되므로 더 이상 객체를 사용할 수 없게 된다. 즉, 힙 메모리에는 있지만, 위치 정보를 모르기 때문에 사용할 수 없게 된다. 자바는 이러한 객체를 쓰레기로 취급하고 Gaarbage Collector를 실행시켜 자동으로 제거한다.

자바의 객체를 제거하는 유일한 방법은 객체의 모든 참조를 없애는 것이다. 

String hobby = "여행";
hobbby = "영화";

위에 코드에서 "여행"에 해당하는 String 객체는 쓰레기가 된다. hobby 변수에 "영화" 가 대입되면서 다른 String 객체의 번지가 대입되어 이전 번지를 잃어버리기 때문이다.

 

 

'언어 > JAVA' 카테고리의 다른 글

[참조 타입] 배열(Array)  (2) 2023.01.24
[변수 & 참조 타입] String  (2) 2023.01.23
[변수] 타입 변환  (0) 2023.01.17
[chapter2] 확인문제  (0) 2023.01.16
[chapter3] 확인문제  (0) 2023.01.16