프로그래밍 언어/JAVA

JAVA에서의 생성자와 소멸자

구루다 2023. 3. 2. 12:02
반응형

JAVA에서의 생성자와 소멸자

객체 지향 프로그래밍에서 클래스는 객체를 생성하기 위한 청사진(blueprint)이며, 객체는 클래스를 기반으로 생성된 인스턴스입니다. JAVA에서는 클래스를 정의할 때 생성자(constructor)와 소멸자(destructor)를 정의할 수 있습니다. 생성자는 객체가 생성될 때 자동으로 호출되는 메소드이며, 소멸자는 객체가 소멸될 때 호출되는 메소드입니다. 이번 글에서는 JAVA에서 생성자와 소멸자에 대해 자세히 알아보겠습니다.

 

JAVA 7-4
JAVA 7-4

 

 

Java에서 상속과 다형성의 이해

Java에서 상속과 다형성의 이해 Java는 객체 지향 프로그래밍 언어 중 하나로, 객체 지향 프로그래밍의 핵심 개념인 상속과 다형성을 지원합니다. 상속은 객체 지향 프로그래밍에서 객체들 간의

gruda.tistory.com

 

JAVA에서의 추상화와 캡슐화

JAVA에서의 추상화와 캡슐화 Java는 객체 지향 프로그래밍(OOP)의 특징을 가진 프로그래밍 언어입니다. 객체 지향 프로그래밍은 객체들의 상호작용을 기반으로 프로그램을 작성하는 방법입니다.

gruda.tistory.com

 

Java에서의 클래스와 객체

Java에서의 클래스와 객체 Java는 객체 지향 프로그래밍 언어로, 모든 것이 객체로 구성되어 있습니다. Java에서 클래스는 객체를 정의하는 데 사용됩니다. Java String 클래스의 다양한 메소드 Java Stri

gruda.tistory.com

 

Java String 클래스의 다양한 메소드

Java String 클래스의 다양한 메소드 Java에서 문자열을 다루는 데에는 String 클래스가 자주 사용됩니다. String 클래스는 문자열을 다루는 다양한 메소드를 제공합니다. 이번에는 String 클래스에서 제

gruda.tistory.com

 

 

생성자(Constructor)

JAVA에서 생성자는 객체가 생성될 때 자동으로 호출되는 메소드입니다. 생성자는 객체가 생성될 때 필요한 초기화 작업을 수행하며, 객체가 생성될 때 딱 한 번만 호출됩니다. 생성자는 다음과 같은 특징을 가지고 있습니다.

  • 생성자의 이름은 클래스의 이름과 동일합니다.
  • 생성자는 반환형이 없습니다.
  • 생성자는 객체가 생성될 때 자동으로 호출됩니다.
  • 생성자는 객체를 초기화하는 역할을 수행합니다.
  • 생성자는 다중 정의(overloading)가 가능합니다.
반응형

 

JAVA에서 생성자는 다음과 같은 형식으로 정의됩니다.

class 클래스이름 {
    // 멤버 변수 선언
    // 생성자 정의
    클래스이름(매개변수) {
        // 초기화 작업 수행
    }
}

예를 들어, 다음과 같은 Student 클래스를 정의한다고 가정해봅시다.

class Student {
    String name;
    int age;
    String major;

    // 생성자 정의
    Student(String name, int age, String major) {
        this.name = name;
        this.age = age;
        this.major = major;
    }
}

위 코드에서 Student 클래스에는 name, age, major라는 세 개의 멤버 변수가 선언되어 있습니다. 이 클래스에는 생성자도 정의되어 있는데, 생성자의 매개변수로는 name, age, major가 전달됩니다. 생성자는 이 매개변수를 사용하여 객체를 초기화합니다.

Student student1 = new Student("홍길동", 20, "컴퓨터공학과");

위와 같이 객체를 생성할 때, 생성자에 매개변수를 전달해줍니다. 생성자는 이 매개변수를 사용하여 객체를 초기화하고, 생성된 객체는 student1 변수에 저장됩니다.

 

300x250

 

소멸자(Destructor)

JAVA에서는 소멸자를 직접 지원하지 않습니다. JAVA에서는 객체가 더 이상 참조되지 않을 때 가비지 컬렉터(garbage collector)가 자동으로 객체를 제거합니다. 이 때, 객체가 제거되기 전에 마지막으로 실행될 코드를 작성해보면 다음과 같습니다.

class MyClass {
    // 소멸자가 필요 없는 경우
}

MyClass myObject = new MyClass();
myObject = null; // 객체가 더 이상 참조되지 않음

위 코드에서 MyClass 클래스는 소멸자가 필요 없는 경우입니다. 객체가 더 이상 참조되지 않으면 가비지 컬렉터가 자동으로 객체를 제거합니다. 하지만 만약 클래스 내부에서 파일이나 네트워크 연결 등의 자원을 사용하는 경우, 소멸자를 구현하여 자원을 해제하는 것이 좋습니다. 이 경우 finalize() 메소드를 사용하여 소멸자와 비슷한 역할을 수행할 수 있습니다. finalize() 메소드는 가비지 컬렉터가 객체를 제거하기 전에 자동으로 호출됩니다.

class MyClass {
    // 자원을 사용하는 경우
    protected void finalize() throws Throwable {
        // 자원 해제 코드
        super.finalize();
    }
}

MyClass myObject = new MyClass();
myObject = null; // 객체가 더 이상 참조되지 않음
System.gc(); // 가비지 컬렉터 강제 실행

위 코드에서 finalize() 메소드를 사용하여 자원을 해제하는 코드가 포함되어 있습니다. 객체가 더 이상 참조되지 않을 때, 가비지 컬렉터가 자동으로 finalize() 메소드를 호출하여 자원을 해제합니다. finalize() 메소드를 사용하는 경우, 객체가 제거되기 전에 명시적으로 가비지 컬렉터를 강제로 실행하는 것이 좋습니다.

 

 

정리

JAVA에서 생성자는 객체가 생성될 때 자동으로 호출되는 메소드이며, 객체를 초기화하는 역할을 수행합니다. 생성자는 클래스의 이름과 동일하며, 반환형이 없습니다. JAVA에서는 소멸자를 직접 지원하지 않지만, finalize() 메소드를 사용하여 객체가 제거되기 전에 자원을 해제할 수 있습니다. 객체가 더 이상 참조되지 않을 때, 가비지 컬렉터가 자동으로 객체를 제거합니다. 객체 내부에서 파일이나 네트워크 연결 등의 자원을 사용하는 경우, 소멸자나 finalize() 메소드를 사용하여 자원을 해제하는 것이 좋습니다.

320x100
728x90