본문 바로가기

java 공부/객체지향 with 김영한

[실전자바-기본편]5. 기본형과 참조형_1

변수의 데이터 타입을 크게 보면 기본형참조형으로 분류된다.

 

  • 기본형(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에 복사되어 들어갔기 때문에 두 객체가 가리키는 위치가 같다.

그러므로 값을 변경하면 같은 위치의 데이터를 변경하기 때문에 출력하면 같은 값이 나오는 것이다.