티스토리 뷰

Java

참조 (reference)

Xion 2018. 9. 4. 18:52


앞서, 복제란것이 이해하기 쉽고 연관되어있다.


데이터들은 기본적으로 제공된다해서 기본 데이터 타입이다

ex) byte short int long


기본데이터 타입이 아닌것은

ex)

데이터타입을 생성할때 new를 통해서 생성하는것들은 기본데이터 타입이아ㄹ니라 참조형데이터 형이다

참조가 들어간다  


참조의 예로


class A{
    public int id;
    A(int id){
        this.id = id;
    }
}
public class ReferenceDemo1 {
    public static void runValue(){
        int a = 1;
        int b = a;
        b = 2;
        System.out.println("runValue, "+a);
    }
   
    public static void runReference(){
        A a = new A(1);
        A b = a;
        b.id = 2;
        System.out.println("runReference, "+a.id);     
    }
    public static void main(String[] args) {
        runValue();
        runReference();
    }
}


이렇게 코드가있으면 ,


runReference() 메소드에서

A a = new A(1) 로인해

변수 a가생겼고 b 가 생겼다 데이터 타입은 둘다 A이며

new A(1)가 실행이되면   클래스 A의 인스턴스가 변수 a에 저장되는것이아니고 컴퓨터 어딘가에

A인스턴스 이렇게 생성된다 변수 a는 클랜스 A의 위치에 대한 정보를 가지고 있다.


A b=a; 이부분에 변수 b에는 인스턴스 a가 새로 들어가는것이아니고 변수 a가 가르키고있는 A인스턴스의 주소가 가리키는

것을 가리키게된다. 그렇기때문에 변수 b.id=2라고 하게되면 A인스턴스가 가지고있는 id변수인값을 2로 변경하는것이다.


따라서 변수 a 역시도 A인스턴스를 가리키고있기때문에 이역시도 id=2 라는 값이 출력이 된다.

이런것을 참조레퍼런스라고 부른다.


즉, 변수 a 는 A인스턴스를 식별할수있는 주소값만 가지고있는것이다 b역시 마찬가지이다.


new로 객체를 만드는 데이터타입 즉 기본 데이터타입이 아닌 데이터타입들은 변수를 만들게되면 ex a, b와같이

그 객체를 직접 저장하는것이아니라 그 객체에대한 참조값만 가지고있기때문에 어디에있는지에대한 위치의값만

가지고있어서 a를 수정하면 a가 가리키고있는는 A인스턴스를 수정하는것이고 b도 수정하면 b가가리키고있는

A인스턴스를 수정하게되는것이다.



기본 데이터 값이 아니면 참조이다 .


동영상 그림 참조 생활코딩 -


'Java' 카테고리의 다른 글

오버라이딩과(Override) VS 추상화(abstract)의 차이점  (0) 2019.09.12
접근제어자 & 사용이유  (0) 2019.09.12
enum  (0) 2018.09.04
java clone  (0) 2018.09.04
java finalize , garbage collection  (0) 2018.08.29