본문 바로가기

프로그래밍언어/Java

[Java 중급] 기본형과 참조형의 공유

기본형과 참조형의 공유


자바에서 제공하는 많은 기본 클래스가 불변 객체로 설계되어 있다. 

  • 기본형: 하나의 값을 여러 변수에서 공유하지 않는다. 
  • 참조형: 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다. 

 

예제


 

public class PrimitiveMain {

    public static void main(String[] args) {
        //기본형은 절대로 같은 값을 공유하지 않는다.
        int a = 10;
        int b = a; // a->b 값 복사 후 대입
        System.out.println("a = " + a);
        System.out.println("b = " + b);

        b = 20;
        System.out.println("20 -> b");
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

 

실행결과

=> 기본형 a와 b는 하나의 값을 공유하지 않는다. b=a라고 하면 자바는 값을 복사해서 대입한다. 

 

이번에는 참조형 예제를 보자. 

 

Addreess.java

public class Address {

    private String value;

    public Address(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Address{" +
                "value='" + value + '\'' +
                '}';
    }
}

 

RefMain1_1.java

public class RefMain1_1 {

    public static void main(String[] args) {
        //참조형 변수는 하나의 인스턴스를 공유할 수 있다.
        Address a = new Address("서울");
        Address b = a;
        System.out.println("a = " + a);
        System.out.println("b = " + b);

        b.setValue("부산");
        System.out.println("b -> 부산");
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

 

실행 결과

=> b를 변경하면 a의 주소도 '부산'으로 변경된다. 

참조형 변수들은 같은 참조값을 통해 같은 인스턴스를 참조한다. 

b=a라고 하면 a의 참조값을 복사해서 b에 전달한다. 참조값을 복사하므로 결과적으로 a,b는 같은 인스턴스를 참조하는 것.

 

 

 

* 인프런 '김영한의 실전 자바 - 중급 1편'을 참고하여 작성하였습니다. 

'프로그래밍언어 > Java' 카테고리의 다른 글

[Java 중급] 불변 객체  (0) 2024.08.12
[Java 중급] 공유 참조와 사이드 이펙트  (0) 2024.08.08
[Java 중급] equals()  (0) 2024.08.08
[Java 중급] Object와 OCP  (0) 2024.08.01
[Java 중급] toString()  (0) 2024.07.31