자바( Java ) - 클래스, 객체에서 인스턴스 복사 시 가비지 컬렉터( Garbage Collector )

Chanyang Im·2022년 4월 2일
0

Java

목록 보기
8/14
post-thumbnail

예제

class Tv {
    // Tv의 멤버변수
    String color;
    boolean power;
    int channel;

    // Tv의 메서드
    void power() {
        power = ! power;
    }

    void channelUp() {
        ++channel;
    }

    void channelDown() {
        --channel;
    }
}
public class TvTest {
    public static void main(String[] args) {
        Tv t1 = new Tv(); // Tv = t1; t1 = new Tv(); 한문장으로 표현
        Tv t2 = new Tv();

        System.out.println("t1의 채널은 " + t1.channel + "입니다.");
        System.out.println("t2의 채널은 " + t2.channel + "입니다.");

        t1.channel = 7;
        t2.channel = 8;

        System.out.println("t1의 채널은 " + t1.channel + "입니다.");
        System.out.println("t2의 채널은 " + t2.channel + "입니다.");

        t2 = t1; // t1이 저장하고 있는 값(주소)를 t2에 저장한다.
        t1.channelDown(); // t1에 저장되어 있는 주소(객체) 값이 변경, 따라서 t2도 같은 주소를 참조하고 있어서 아래와 같은 결과가 나온다.

        System.out.println("t1의 채널은 " + t1.channel + "입니다.");
        System.out.println("t2의 채널은 " + t2.channel + "입니다.");

        // 같은 주소값을 저장하고 있다.
        System.out.println(t1);
        System.out.println(t2);
    }
}

예제 코드를 보면, t2 = t1; 을 하면서 두 변수 모두 같은 주소(인스턴스)를 저장하고 있다.
원래 t2가 가리키고 있던 인스턴스는 어떻게 될까?
인스턴스는 메모리 공간을 차지하고 있다.
인스턴스는 자신을 참조하고 있는 참조변수가 하나도 없으면 더 이상 사용될 수 없다.
따라서 자바의 가비지 컬렉터(Garbage Collector)에 의해 자동으로 메모리에서 제거된다.

profile
안녕하세요!! 세상에 관심이 많은 공학자입니다!😆

0개의 댓글