-
[Java 자바] 5. 참조 타입 ① 데이터 타입 분류, 메모리 사용 영역, StringProgramming/Java 2022. 7. 30. 15:11반응형
5-1. 데이터 타입 분류
- 기본 타입(Primitive type): 정수, 실수, 논리 데이터 타입 (byte, char, short, int, long, float, double, boolean)
- 참조 타입(Reference type): 이외의 모든 데이터 타입(String, 배열, 열거, 클래스, 인터페이스 등)=> 둘은 메모리에 저장되는 방식이 다르다!
// [기본 타입 변수] int age = 25; double price = 100.5; // [참조 타입 변수] String name = "에린"; String hobby = "코딩";
- 기본 타입 변수들은 변수와 값이 스택 영역에 직접 저장
- 참조 타입 변수들은 변수와 힙 영역에 저장되어 있는 객체의 주소값이 스택 영역에 저장
=> 주소를 따라 객체를 참조한다는 뜻에서 참조 타입 변수라고 함5-2. 메모리 사용 영역
5-2-1. 메소드(Method) 영역
- 코드에서 사용되는 클래스(~.class)를 클래스로더로 읽어
클래스별 상수풀, 필드, 메소드 생성자 코드 등을 분류하여 저장
- JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
- static 으로 정의된 클래스, 변수 등이 저장5-2-2. 힙(Heap) 영역
- 객체와 배열이 생성되는 영역으로, 스택 영역의 변수나 다른 객체의 필드에서 참조함
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 되므로 GC에서 자동으로 제거5-2-3. 스택(Stack) 영역
- 기본자료형, 지역변수, 파라미터, 리턴값, 연산에 사용되는 임시 값 등이 저장되는 영역
- 생성 시점: 변수가 초기화될 때
- 소멸 시점: 변수가 선언된 블록을 벗어날 때 제거5-3. 참조 변수의 ==, != 연산
- 기본 타입 변수의 동등 비교 연산은 변수의 값이 같은지, 아닌지를 비교
- 참조 타입 변수는 동일 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용(동일한 주소 값을 갖고 있다는 것은 동일한 객체를 참조한다는 의미)
5-4. null 과 NullPointerException
- 참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 의미로 null 값을 가질 수 있음(초기화 하지 않으면 null 값을 가짐)
- null로 초기화된 참조 변수는 스택 영역에 생성됨- 참조 타입 변수가 null을 가지고 있을 경우, 해당 변수는 사용이 불가
=> 이를 사용하려고 하면 NullPointerException 예외가 발생5-5. String 타입
- String은 대표적인 참조 타입 변수이며, ( " " ) 을 사용하여 변수 값 초기화
String name = "에린"; String hobby = "코딩";
[❗️Syntax Alert] String 변수의 값이 같을 경우, 같은 참조값을 가지지만
새로운 String객체를 생성하여 동일 값을 넣으면 같은 참조값 주소를 가지게 된다.String name1 = "에린"; String name2 = "에린"; String name3 = new String("에린"); System.out.println(name1 == name2); // true System.out.println(name1 == name3); // false
- name1, name2 => 동일 참조값을 가짐
- name3 => 생성자를 통해 새로운 String 객체 생성, 다른 참조값 가짐
- 동등비교시 참조값 주소를 기준으로 비교하므로,
name3는 name1, name2와 같지 않음// String 의 힙 영역에 저장되어 있는 실제 값을 비교하고 싶을 경우엔 equlas() 메소드 사용 System.out.println(name1.equlas(name3)); // true 반환
반응형'Programming > Java' 카테고리의 다른 글
[Java 자바] 6. 클래스 ① 객체지향 프로그래밍, 객체와 클래스 (0) 2022.07.30 [Java 자바] 5. 참조 타입 ② 배열, 배열 생성, 배열 길이, 다차원 배열, 향상된 for문 (0) 2022.07.30 [Java 자바] 4. 조건문과 반복문 ② 반복문, for문, while문, do-while문 (0) 2022.07.30 [Java 자바] 4. 조건문과 반복문 ① 조건문, if, if-else, else if, switch (0) 2022.07.30 [Java 자바] 3. 연산자 ② 이항 연산자, 삼항 연산자 (0) 2022.07.27