참조타입
by Jm Park
1. 데이터 타입 분류
- 기본 타입(primitive type): 정수, 실수, 문자, 논리 리터럴을 저장하는 타입
- 참조 타입(reference type): 객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말함
2. 메모리 사용 영역
- 메소드(Method) 영역: JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역.
- 힙(Heap) 영역: 객체와 배열이 생성되는 영역. JVM이 쓰레기 수집기(Garbege Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거.
- JVM 스택(Stack) 영역: 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당. 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop).
3. 참조 변수의 ==, != 연산
참조 타입 변수의 값은 힙영역의 객체 주소이므로 결국 주소 값을 비교하는 것.
동일한 객체를 참조하고 있을 때만 ==연산 결과가 true. 값이 같더라도 다른 객체를 참조하고 있는 경우는 false가 나옴.
4. null과 NullPointerException
- null
참조 타입 변소는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있음. 해당 참조 변수는 스택영역에 생성됨.
- NullPointerException
null값을 가지고 있는 참조 타입 변수를 사용할 경우 발생하는 예외.
int[] array = null;
array[0] = 10; // NullPointerException
array 변수가 참조하는 배열 객체가 없기 때문에 NullPointerException발생.
5. String 타입
문자열이 직접 변수에 저장되는 것이 아닌, 문자열은 String 객체로 생성되고 변소는 String 객체를 참조하는 것.
- 생성 방법
```{.java} // 1. 변수 우선 선언 후 문자열 리터럴 대입 String str = null; str = “ABC”;
// 2. 변수 선언 및 문자열 리터럴 대입 String str = “ABC”;
// 3. new연산자 사용 String str = new String(“ABC”);
String은 객체를 참조하기 때문에 문자열의 값만을 비교하는 경우 equals() 메소드 사용.
## 6. 배열 타입
같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조.
선언과 동시에 저장할 수 있는 데이터 타입이 결정되며, 한 번 생성된 배열의 길이는 늘리거나 줄일 수 없음.
* **선언 방법**
```{.java}
// 1. 데이터타입[] 변수명;
int[] array;
// 2. 데이터타입 변수명[];
int array[];
// 3. new연산자 사용
int[] array = new int[5];
- 배열 복사
- for문을 사용
for(int i=0; i<arrayA.length; i++) arrayB[i] = arrayA[i];
- System.arraycopy() 메소드 사용
System.arraycopy(원본배열, 원본배열 시작 idx, 새배열, 새배열 시작 idx, 복사 개수);
- for문을 사용
cf) 메소드의 매개값이 배열일 경우 new연산자 사용.
int sum = sum( new int[] {10,20} );
7. 열거 타입
한정된 값만을 갖는 데이터 타입.
몇 개의 열거 상수 중에서 하나의 상수를 저장하는 데이터 타입.
-
열거타입 선언
열거타입 이름을 정한 후 열거타입 이름으로 소스파일(.java)생성. -
열거 객체의 메소드
열거객체 메소드를 열거 객체에서 사용할 수 있는 이유는 모든 열거 타입은 컴파일 시에 Enum 클래스에 상속하세 되어 있기 때문.- name(): 열거 객체의 문자열 리턴
- ordinal(): 열거 객체의 순번(0부터 시작)을 리턴
- compareTo(): 열거 객체를 비교해서 순번 차이를 리턴
- valueOf(String name): 주어진 문자열의 열거 객체를 리턴
- values(): 모든 열거 객체들을 배열로 리턴
참고 서적
이것이 자바다, 신용권 지음, 한빛미디어
Subscribe via RSS