Back-end/java

[혼공자][챕터5] 참조타입

Nellie Kim 2022. 11. 11. 19:28
728x90

1. 참조 타입과 참조 변수

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

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

 

메모리 사용 영역

JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 다음과 같이 세부 영역으로 구분해서 사용한다.

 

- 메소드 영역

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

코드에서 사용되는 클래스(.class)들을 클래스 로더로 읽어 클래스별로 정적 필드(static field)와 상수, 메소드 코드, 생성자코드 등을 분류해서 저장한다.

 

- 힙 영역 

객체와 배열이 생성되는 영역. 만약 참조하는 변수나 필드가 없다면 의미없는 객체가 되기 때문에 JVM이 쓰레기로 취급하고 쓰레기수집기(Garbage Collector)를 실행시켜 자동으로 제거한다.

 

- JVM 스택 영역 

메소드를 호출할 때마다 프레임을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)한다.

스택 영역에 변수가 생성되는 시점은 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때이다. 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.

 

2. 배열

변수는 1개의 데이터만 저장할 수 있다. 그래서 저장할 데이터가 많아지면 그만큼 많은 변수가 필요하고 코드도 길어진다.

배열은 많은 양의 데이터를 적은 코드로 손쉽게 처리할 수 있다.

 

배열 선언

타입[] 변수;   or  타입 변수[];

 

배열 생성

1. 값 목록으로 배열 생성 
타입[] 변수 = {값1, 값2, 값3,....}  ex. int[] score = {80, 90, 60}

2. new 연산자로 배열 생성
타입[] 변수 = new 타입[길이]; 
ex. int[] intArray = new int[5];   → 이 때 배열안의 값은 모두 0으로 초기화 됨 (String이라면 null로 초기화)

 

3. 열거 타입

열거타입 선언

public enum 열거타입이름 { ...(열거상수)... }

ex. public enum Week { MONDAY, TUESDAY, WENDSDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
열거 상수는 관례적으로 대문자로 사용한다. 열거 상수는 객체이다!

 

열거타입 사용

열거타입 변수;
ex. Week today; 
      today = Week.SUNDAY;

열거타입 변수 = 열거타입.열거상수;
ex. Week today = Week.SUNDAY;

 

Week today = Week.SUNDAY; 코드는 아래와 같이 표현할 수 있다.

 

 

 

출처 : 혼자 공부하는 자바