Java 참조타입

·2022년 2월 26일
0

JAVA

목록 보기
12/14

메모리 사용 영역

JVM은 운영체제에서 할당받은 메모리 영역을 세부 영역으로 나누어 사용한다.

메모리 영역 Runtime Data Area

  • 메소드 영역 Method Area
    모든 스레드가 공유하는 영역으로 클래스별로 정적 필드, 상수, 메소드, 생성자 등을 분류해서 저장한다.

  • 힙 영역 Heap Area
    객체와 배열이 생성되는 영역으로 JVM 스택 영역에서 참조한다. 참조하는 변수나 필드가 없다면 자동으로 객체가 제거된다.

  • JVM 스택 영역 Stack Area
    메소드를 호출할 때마다 frame을 push(추가)하고 종료되면 pop(제거)한다. 프레임 내부에는 로컬 변수 스택이 있다.

참조 타입 (Reference Type)

번지를 통해서 객체를 참조하는 참조 타입

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

기본 타입 변수는 스택 영역에 값을 저장한다.
참조 타입 변수는 스택 영역에 번지 값을 저장하고 그 번지에 맞는 힙 영역에 실제 값을 저장한다.

Null 값

참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 의미로 null값을 가질 수 있다.
String 변수가 null이라면 참조하는 String 객체가 없다는 의미.

NullPointerException

null인 참조 변수를 사용하면 발생하는 exception이다.

리터럴 Literal

소스코드에서 개발자가 직접 입력한 값.

  • 문자열 리터럴이 동일하다면 동일한 String 객체를 공유한다.
    String name1 = “milk” ;
    String name2 = “milk”;
    힙 영역에 String 객체 “milk”가 하나만 생성된다.

  • 객체 생성 연산자인 new 연산자로 힙 영역에 새로운 객체를 직접 만들 수 있다.
    이럴 경우는 서로 다른 String 객체를 참조한다.
    String name1 = new String(“milk”);
    String name2 = new String(“milk”);

new 연산자 vs 문자열 리터럴
.. 어떤 방식으로 생성하느냐에 따라 비교 연산자의 결과가 달라질 수 있다.

equals( ) 메소드

동일하건 다르건 String 객체의 내부 문자열을 비교하고 싶다면 String 객체의 equals()메소드를 사용할 수 있다.

비교 연산자 == , !=

==, !=를 참조 변수에서 사용한다면 번지를 비교하는 것이다.

열거 타입 Enumeration Type

한정된 값만 갖는 타입을 열거 타입이라고 한다.

열거 타입 이름의 소스 파일(.java)을 만들고 아래 형식으로 열거 타입 선언을 한다.
public enum 열거타입이름{ 열거상수1, 열거상수2, ..}

열거상수를 사용할때에는 아래 형식으로 사용한다.
열거타입 변수 = 열거타입.열거상수;

  • 열거타입도 참조타입이므로 null값을 저장할 수 있다.

  • 열거 상수들은 메소드 영역에 생성되고 힙 영역을 참조한다.

  • 열거 타입 변수는 스택 영역에 생성되고 힙 영역의 객체를 참조한다.

public enum Week{ 
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
 }
.
.
.

// main에서 사용하는 예시..

Week today = Week.SUNDAY ; 

열거 타입 변수 today에 열거 상수인 SUNDAY를 저장하였다.

0개의 댓글

관련 채용 정보