참조 자료형
- 참조 자료형은 객체의 주소를 참조하는 자료형으로 배열, 클래스, 인터페이스, 열거형 등이 있습니다.
- 배열(array): 같은 타입의 데이터 여러 개를 한 단위로 묶어서 저장하는 자료형입니다.
- 클래스(class): 특정 사물이나 개념을 프로그램으로 표현하기 위한 데이터와 함수의 집합체를 뜻합니다.
- 인터페이스(interface): 클래스 개념을 추상화하여 최소한의 기능만 기술한 추상 자료형입니다.
- 열거형(enum): 특정 상수를 묶어서 저장하는 자료형입니다.
- 자바에서 제공하는 8개의 기본 자료형(byte, short, int, long, char, float, double, boolean)을 제외한 모든 타입은 참조 자료형입니다.
기본 자료형과 참조 자료형의 차이
- 기본 자료형과 참조 자료형의 차이는 값의 저장 방식입니다.
- 기본 타입으로 선언된 변수는 값 자체를 저장하지만, 참조 타입으로 선언된 변수는 객체가 생성된 메모리의 주소를 저장합니다.
- 즉 기본 타입은 값을 직접적으로 가지지만, 참조 타입은 값을 간접적으로 보여줍니다.
기본 자료형, 참조 자료형 저장 비교 예시
// String(문자열) 타입의 참조 자료형
String name = 홍길동;
String gender = 남성;
// int, double 타입의 기본 자료형
int age = 32;
double height = 175.2;
double weight = 69.4;
참조 타입의 값 비교
- 참조 타입의 변수는 실제 값이 아닌 자료를 저장하고 있는 주소값을 저장하고 있기 때문에 실제 저장하고 있는 값이 같아도 저장하고 있는 메모리의 번지수가 다르면 서로 다른 변수로 판단합니다.
- 반대로 다른 변수명을 가지고 있더라도 같은 메모리의 주소값을 참조하고 있다면 같은 값으로 판단합니다.
// 참조 타입 변수 값 비교
public class ReferenceTypeVariableCompareExample {
public static void main(String[] args) {
// 참조 변수인 String 타입의 변수 생성
String str1
String str2;
String str3;
// str1 변수의 메모리 주소에 "apple"이라는 값 저장
// 객체를 새로 생성하기 위해서는 new 키워드 사용 필요
str1 = new String("apple");
// str2 변수의 메모리 주소에 "apple"이라는 값 저장
str2 = new String("apple");
// str2의 주소값을 str3 변수에 저장
str3 = str2;
// 같은 "apple"을 저장하고 있지만 false 출력
System.out.println(str1 == str2);
// 서로 같은 주소값을 가지고 있기 때문에 true 출력
System.out.println(str2 == str3);
}
}
null 및 nullpointerexception
- 참조 타입의 변수는 기본 타입 변수와 달리 값을 간접적으로 표현하기 때문에 null 값을 가질 수 있습니다.
(기본 타입 변수는 값이 없으면 오류 발생) - 참조 타입 변수가 null값을 가지고 있을 때 해당 변수를 다른 곳에서 활용하려고 하는 경우 "nullpointerexception"이라는 오류가 발생합니다.
- 따라서 nullpointerexception을 피하기 위해서는 참조 타입 변수가 객체를 정확하게 참조하도록 번지를 대입해야합니다.
(경우에 따라 참조 타입 변수에 null을 대입하여 활용하는 경우도 있음)
'Programing Language > Java' 카테고리의 다른 글
[Java] 자바 배열의 복사(Arrays Copy) (0) | 2022.06.20 |
---|---|
[Java] 연산 우선 순위(Operation Priority) (0) | 2022.06.17 |
[Java] 자바 문자열 타입(String Type) (0) | 2022.06.15 |
[Java] 자바의 분기문(Branching Statements) (0) | 2022.06.14 |
[Java] 클래스의 구성 요소(Member of Class) (0) | 2022.06.11 |