변수의 데이터 타입을 크게 보면 기본형과 참조형으로 분류된다.
- 기본형(Primitive Type) : int, long 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
- 소문자로 시작한다. 개발자가 새로 정의할 수 없다.
- 참조형(Reference Type) : Person person1, int[] person 와 같이 데이터에 접근하기 위한 주소를 저장
- 객체는 " . "(dot)을 통해서 메모리 상에 생성된 객체를 찾아가서 사용
- 배열은 [ ]를 통해서 메모리 상에 생성된 배열 을 찾아가서 사용
- 클래스는 모두 참조형이다. 클래스는 대문자로 시작한다
기본형과 참조형의 계산
- 기본형은 들어있는 값 그대로 계산 가능
- 참조형은 들어있는 참조값으로만 계산안됨. 주소지에 가야 실체가 있음
// 기본형 계산
int a = 10, b = 20;
int sum = a + b;
// 참조형 계산
Person p1 = new Person();
Person p2 = new Person();
p1+p2 // 오류발생
참조형은 변수에 객체 위치인 참조값이 들어있으므로 계산이 안됨
아래의 코드처럼 " . "을 통하여 객체의 기본형 멤버 변수에 접근하면 연산이 가능하다.
// 참조형 계산
Person p1 = new Person();
p1.age = 15;
Person p2 = new Person();
p1.age = 17;
int sum = p1.age + p2.age; //연산가능
※ String
: 자바에서 String은 매우 특별. String은 사실 클래스다. 그래서 참조형이다.
그런데 기본형처럼 문자 값을 바로 대입할 수 있다.
기본형과 참조형의 변수 대입
※자바는 항상 변수의 값을 복사해서 대입한다.※
기본형 대입
int a = 10;
int b = a;
a의 값이 b에 복사되어 들어간다.
참조형 대입
Person p1 = x001; //참조값
Person p2 = p1;
p1의 해당 위치의 참조값이 복사되어 들어간다.
형변환
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA;
System.out.println("dataA 참조값="+ dataA);
System.out.println("dataB 참조값="+ dataB);
System.out.println("dataA.value = " + dataA.value);
System.out.println("dataB.value = " + dataB.value);
//dataA 변경
dataA.value = 20;
System.out.println("변경 dataA.value = 20");
System.out.println("dataA.value = " + dataA.value);
System.out.println("dataB.value = " + dataB.value);
//dataB 변경
dataB.value = 30;
System.out.println("변경 dataB.value = 30");
System.out.println("dataA.value = " + dataA.value);
System.out.println("dataB.value = " + dataB.value);
}
위의 코드의 출력 결과를 한번 생각해보자.
출력 결과
dataA의 참조값이 dataB에 복사되어 들어갔기 때문에 두 객체가 가리키는 위치가 같다.
그러므로 값을 변경하면 같은 위치의 데이터를 변경하기 때문에 출력하면 같은 값이 나오는 것이다.
'java 공부 > 객체지향 with 김영한' 카테고리의 다른 글
[실전자바-기본편]7. 변수와 초기화 (0) | 2024.07.23 |
---|---|
[실전자바-기본편]6. 기본형과 참조형_2 (12) | 2024.07.22 |
[실전자바-기본편]4. 실습하기_1 (0) | 2024.07.22 |
[실전자바-기본편]3. 클래스 배열 도입 (0) | 2024.07.22 |
[실전자바-기본편]2. 클래스_2 (2) | 2024.07.19 |