-
자바의 타입 시스템에서 참조 타입과 원시 타입(또는 기본형 타입)을 구분한다는것은 무엇을 의미하는가?자바웹프로그래밍/JAVA 2024. 12. 5. 15:35728x90반응형
1. 원시 타입 (Primitive Types)
원시 타입은 자바에서 제공하는 기본 데이터 타입입니다. 원시 타입 변수는 값을 직접 저장합니다. 이러한 변수는 메모리 상에 값을 직접 저장하며, 값 자체를 다룹니다. 자바에서 원시 타입에는 다음과 같은 데이터 타입들이 있습니다:
- int (정수)
- char (문자)
- boolean (참/거짓)
- float, double (실수)
- byte, short, long (정수 타입의 다른 크기들)
원시 타입 변수의 동작:
- 원시 타입의 변수는 값 자체를 저장하고, == 연산자로 비교할 때 값이 같으면 true를 반환합니다.
- 원시 타입 변수는 스택(stack) 메모리에 저장됩니다
int x = 5; int y = 5; System.out.println(x == y); // true (값이 같음)
여기서 x와 y는 값 5를 저장하고 있습니다. == 연산자는 이 값을 비교하고 값이 같으면 true를 반환합니다.
2. 참조 타입 (Reference Types)
참조 타입은 객체나 배열 같은 데이터 타입을 포함합니다. 참조 타입 변수는 메모리 주소(참조)를 저장합니다. 즉, 참조 타입의 변수는 실제 데이터를 저장하지 않고, 그 데이터가 저장된 메모리의 위치만을 저장합니다.
자바에서 참조 타입에는 다음과 같은 것들이 포함됩니다:
- 클래스 객체 (String, Person, ArrayList 등)
- 배열 (int[], String[] 등)
- 인터페이스 및 열거형 등
참조 타입 변수의 동작:
- 참조 타입의 변수는 메모리 상의 객체를 참조하고, == 연산자는 두 참조가 동일한 객체를 참조하는지 비교합니다.
- 참조 타입 변수는 힙(heap) 메모리에 저장됩니다.
String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1 == str2); // false (다른 메모리 위치)
위 예시에서 str1과 str2는 같은 문자열 값을 가지고 있지만, 서로 다른 객체로 힙 메모리에 저장되므로 == 비교는 메모리 주소를 비교하게 되어 false를 반환합니다.
참고: 만약 String 같은 클래스가 문자열 리터럴을 사용하면, 자바는 문자열 상수 풀을 사용하여 같은 리터럴 값을 공유하게 할 수 있습니다. 이 경우 == 연산자가 참조 비교에서도 true를 반환할 수 있습니다.
String str1 = "hello"; String str2 = "hello"; System.out.println(str1 == str2); // true (같은 메모리 위치)
3. 차이점 요약
- 원시 타입 (Primitive Types):
- 값을 직접 저장합니다.
- int, char, boolean 등.
- 메모리에서 **스택(stack)**에 저장됩니다.
- 값 비교 시 ==가 값 자체를 비교합니다.
- 참조 타입 (Reference Types):
- 메모리 주소(참조)를 저장합니다.
- 클래스 객체, 배열, 인터페이스 등.
- 메모리에서 **힙(heap)**에 저장됩니다.
- ==가 참조(메모리 주소)를 비교합니다.
728x90반응형'자바웹프로그래밍 > JAVA' 카테고리의 다른 글
내부 스태틱 클래스(static nested class)를 사용하는 이유와 그 동작 방식 (0) 2024.07.25 BufferedOutputStream를 사용하면 성능이 좋아지는 이유 및 자세한 설명 with FileDescriptor (2) 2024.07.24 InputStream 과 OutputStream에 차이 ! (0) 2024.07.24 org.springframework.core.io.Resource란 무엇인가 !!? (0) 2024.07.15 JVM의 메모리 영역에 대한 이해와 예시와 reflection의 이해 (0) 2024.07.11