본문 바로가기
Programing/JAVA (& 혼공자Java)

자바(Java) - 참조 타입과 참조 변수1

by a.k.a DUKI 2020. 9. 19.
728x90
반응형

자바의 타입은 기본 타입(primitive type)참조 타입(reference type)으로 크게 분류가 된다.

앞서 포스팅 된 내용을 기본 타입이라고 생각하면 된다.

 

혼공자 유툽 참고

 

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

 

 

기본 타입과 참조 타입

기본타입 변수와 참조타입 변수의 차이점저장되는 값이 무엇인지에 따라 결정된다.

  • 기본타입 변수실제 값을 변수에 저장한다.
  • 참조타입 변수메모리의 번지를 변수 안에 저장 한다. 번지를 통해 객체를 참조하여 사용된다. 

 

혼공자 유툽 참고

int타입 변수인 age와 double타입 변수인 price는 직접 값을 저장한다.

String클래스 변수인 name과 hobby는 힙 영역의 String객체 번지 값을 가지고 있다.

이렇게 번지를 통해 객체를 참조하여 String클래스 변수를 참조 타입 변수 라고 한다.

 

 

메모리 사용 영역

JVM이 사용하는 메모리 영역을 설명을 이해 해보자.

JVM은 운영체제에서 할당받은 메모리 영역을 아래 처럼 구분해서 사용한다.

혼공자 유툽 참고

메소드 영역

메소드 영역(Method Area)은 JVM이 시작할 때 생성되고 모든 스레드가 공유 하는 영역.

메소드 영역에는 코드에서 사용되는 클래스들을 클래스 로더로 읽어 클래스 별로 정적 필드(static field)와 상수(constant), 메소드 코드, 생성자(contructor) 코드 등으로 분류하여 저장

 

힙 영역

힙 영역(Heap Area)은 객체와 배열이 생성되는 영역.

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

만일 참조하는 변수나 필드가 없으면 JVM이 이것을 쓰레기로 취급하여, 쓰레기 수집기(Garbage Colletor)를 실행시켜 자동으로 제거한다. (자바는 코드로 객체를 직접 제거하는 방법을 제공하지 않는다.)

JVM스택영역

JVM 스택은 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료디면 해당 프레임을 제거(pop)하는 동작을 수행.

프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조타입 변수가 추가 되거나 제거 된다. 스택영역에 변수가 생성되는 시점은 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때 이다.

변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거 된다.

 

 

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

기본 타입 변수에서 ==,!=의 연산은 변수의 값이 같은지/다른지 조사한다.

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

 

동일한 번지 값을 갖고 있다는 것은 동일한 객체를 참조한다는 뜻이다. 

따라서, 동일한 객체를 참조하고 있는 경우 == 연산의 결과는 true, !=연산의 결과는 false이다.

(참조 변수, 참조하는 객체가 같냐,틀리냐)

 

혼공자 유툽 참고

refVar1은 객체1을 참조.

refVar2, refVar3은 객체 2를 참조

refVar1 == refVar2 //false
refVar1 != refVar2 //true

refVar2 == refVar3 //true
refVar2 != refVar3 //false

 

 

 

 

 

※용어 정리

  • 참조 타입: 기본 타입을 제외한 배열, 열거, 클래스, 인터페이스 등. 참조 타입의 변수에는 객체의 번지가 저장.
  • 메모리 사용 영역: JVM은 운영체제에서 할당 받은 메모리 영역을 메소드 영역, 힙 영역, 스택 영역으로 구분.
    • 메소드 영역: 정적피드, 상수 메소드 코드, 생성자 코드가 위치
    • 힙 영역: 객체 생성
    • 스택 영역: 변수 생성
  • 번지 비교: 참조 타입에서 비교연산자(==,!=)를 사용하면 번지를 비교, 
    • true: 같은 객체를 참조
    • false: 다른 객체 참조

 

 

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형

댓글