7월 15일 - 생명주기

Yullgiii·2024년 7월 15일
0

자바의 객체 생명주기

자바의 객체 생명주기는 객체가 생성되고 사용되다가 더 이상 필요 없어져서 메모리에서 제거되는 과정이다. 이 과정은 다음 단계로 이루어진다: 객체 생성, 객체 사용, 객체 정리, 객체 소멸.

1. 객체 생성

객체는 new 키워드를 사용하여 생성된다. 이때 생성자는 객체 초기화를 담당하며, 필요에 따라 기본 생성자와 매개변수를 받는 생성자가 정의될 수 있다.

public class Car {
    private String model;

    // 기본 생성자
    public Car() {
        this.model = "Unknown";
    }

    // 매개변수를 받는 생성자
    public Car(String model) {
        this.model = model;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }
}
public class Main {
    public static void main(String[] args) {
        Car car1 = new Car(); // 기본 생성자 호출
        Car car2 = new Car("Tesla"); // 매개변수를 받는 생성자 호출

        System.out.println(car1.getModel()); // 출력: Unknown
        System.out.println(car2.getModel()); // 출력: Tesla
    }
}

2. 객체 사용

생성된 객체는 다양한 메서드를 호출하여 사용된다. 객체의 필드에 접근하거나 메서드를 호출하여 필요한 작업을 수행할 수 있다.

public class Main {
    public static void main(String[] args) {
        Car car = new Car("Toyota");

        car.setModel("Honda");
        System.out.println(car.getModel()); // 출력: Honda
    }
}

3. 객체 정리

객체가 더 이상 필요 없게 되면, 객체는 가비지 컬렉터에 의해 정리된다. 개발자는 객체를 명시적으로 정리할 수 없고, 가비지 컬렉션은 자동으로 수행된다.

4. 객체 소멸

객체가 가비지 컬렉션의 대상이 되면, 객체의 소멸자가 호출된다. 자바에서는 finalize 메서드를 통해 객체 소멸 시 추가 작업을 정의할 수 있다. 하지만 finalize 메서드는 사용을 권장하지 않으며, 대신 try-with-resources 구문이나 명시적인 자원 해제를 사용하는 것이 좋다.

public class Resource {
    // 자원 정리 메서드
    public void close() {
        System.out.println("Resource closed.");
    }

    // finalize 메서드 (사용 권장하지 않음)
    @Override
    protected void finalize() throws Throwable {
        try {
            close();
        } finally {
            super.finalize();
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Resource resource = new Resource();
        resource = null; // 객체를 null로 설정하여 가비지 컬렉션의 대상이 되도록 함

        // 가비지 컬렉션 강제 호출 (테스트 목적으로만 사용)
        System.gc();
    }
}

So...

자바의 객체 생명주기는 객체 생성, 사용, 정리, 소멸의 과정을 거친다. 객체는 new 키워드로 생성되고, 생성자에서 초기화되며, 다양한 메서드로 사용된다. 객체가 더 이상 필요 없을 때는 가비지 컬렉터가 자동으로 정리하며, finalize 메서드는 소멸 시 추가 작업을 수행할 수 있으나 사용이 권장되지 않는다. 대신 자원 정리는 try-with-resources나 명시적인 자원 해제를 통해 관리하는 것이 좋다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글