5. reference type
Last updated
Last updated
프로그램은 데이터를 처리하는 일을 함.
이러한 데이터를 잘 다루기 위해 데이터 타입(원시:primitive, 참조: reference)에 대해 제대로 된 이해가 필요
기본 타입 : 정수, 실수, 문자, 논리 리터럴을 저장하는 타입
(실제 값을 변수 안에 저장)
정수 : byte, char, short, int, long
실수 : float, double
논리 : boolean
참조 타입: 객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 등
(메모리의 번지로 값을 가짐, 번지를 통해 객체를 참조한다 → 참조 타입)
배열
열거
클래스
인터페이스
JAVA에서의 변수는 스택영역, 객체는 힙 영역에 생성됨
기본 타입 변수인 prive와 age는 값을 저장.
찹조 타입 변수인 name과 hobby에는 객체 주소값을 가지고 잇음. 주소를 통해 객체를 참조한다는 뜻에서 String 클래스 변수를 참조 타입 변수라고 함.
java.exe로 JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 다음과 같이 세부 영역으로 구분해서 사용함.
메서드(Method) 영역
클래스(~.class
)들을 **클래스 로더(class loader)
**로 읽어 클래스별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메서드(method) 데이터, 메서드 코드, 생성자(constructor) 코드 등을 분류해서 저장함. 메서드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역.
ClassLoader
JVM 구성요소 중 하나로 ‘.class’ 바이트 코드로 읽어들여 class 객체를 생성하는 역할
클래스가 요청될 때 class 파일로부터 바이트코드를 읽어 메모리로 로딩하는 역할
각 클래스들은 필요할 때 application에 올라감. 이 작업을 classLoader가 해줌
힙(Heap) 영역
힙 영역은 객체와 배열이 생성되는 영역.
참조하는 변수나 필드가 없다면 GC(Garbage Collector) 대상이 됨
==과 != 연산
기본 타입 : 변수의 값이 같은지 아닌지를 조사
참조 타입 : 객체 주소값을 비교
참조 변수의 null : 힙 영역의 객체를 참조하지 않겠다 라는 뜻
이러한 null 값을 가지는 참조 변수를 사용하려 할 때 NPE 발생
(참조할 객체가 없으므로 사용할 수 없음)
변수 선언
자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 되어 있음.
new 연산자 사용시 서로 다른 객체를 참조함
배열이란 ?
같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조
배열 선언
배열을 선언하는 기호로 사용되는 대괄호 [] 는 타입이나 변수 뒤에 붙을 수 있음.
타입[] 변수;
타입 변수[];
값 목록으로 배열 생성
new 연산자로 배열 생성
배열 길이
객체를 참조하는 배열
배열 복사
열거타입이란? 한정된 값만을 갖는 데이터 타입
열거 타입 이름(.java) 은 관례적으로 CamelCase, 열거 상수는 관례적으로 모두 대문자로 snake_case
열거타입도 참조타입으로
메서드 영역에 열거상수(가 힙영역의 객체를 참조하게 됨)’
힙 영역에 객체 저장.
#1 ~ #3
#4