Menu
Coddy logo textTech

소멸자 (__destruct)

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 8번째.

__destruct 메서드는 객체가 소멸될 때 자동으로 호출되는 특별한 메서드입니다. 객체에 대한 참조가 더 이상 없거나 스크립트가 종료될 때 객체가 소멸됩니다.

다음은 생성자와 소멸자를 모두 포함하는 클래스의 예입니다:

<?php
class Resource {
    public $name;

    public function __construct($name) {
        $this->name = $name;
        echo $this->name . " was created\n";
    }

    public function __destruct() {
        echo $this->name . " was destroyed\n";
    }
}

객체를 생성하고 생명주기를 관찰합니다:

echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r);  // 객체를 명시적으로 소멸시킵니다
echo "=== End ===\n";

출력:

=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===

unset() 함수는 객체에 대한 참조를 제거하여 즉시 소멸자를 호출합니다.

unset()을 호출하지 않으면, 스크립트가 종료될 때 소멸자가 자동으로 실행됩니다:

$r = new Resource("Logger");
echo "Working...\n";
// 스크립트 종료 시 __destruct가 자동으로 호출됩니다

출력:

Logger was created
Working...
Logger was destroyed

핵심 포인트: __destruct 메서드는 객체가 더 이상 필요하지 않을 때 파일 닫기, 리소스 해제 또는 로깅과 같은 정리 작업에 유용합니다.

challenge icon

챌린지

중급

resource.php 파일의 Resource 클래스를 완성하세요:

  1. $name을 인자로 받아 속성으로 설정하고, "[name] was created"를 출력하는 __construct 메서드를 추가합니다.
  2. $message를 인자로 받아 "Log: [message]"를 출력하는 logMessage 메서드를 추가합니다.
  3. "[name] was destroyed"를 출력하는 __destruct 메서드를 추가합니다.

driver.php 파일은 Resource 객체의 생명주기(lifecycle)를 테스트합니다.

치트 시트

__destruct 메서드는 객체가 소멸될 때(해당 객체에 대한 참조가 더 이상 없거나 스크립트가 종료될 때) 자동으로 호출됩니다.

생성자와 소멸자가 포함된 클래스의 예:

<?php
class Resource {
    public $name;

    public function __construct($name) {
        $this->name = $name;
        echo $this->name . " was created\n";
    }

    public function __destruct() {
        echo $this->name . " was destroyed\n";
    }
}

unset() 함수는 객체에 대한 참조를 제거하여 즉시 소멸자를 트리거합니다:

$r = new Resource("Connection");
unset($r);  // explicitly destroy the object

unset()이 호출되지 않으면 스크립트가 종료될 때 소멸자가 자동으로 실행됩니다.

__destruct 메서드는 파일 닫기, 리소스 해제 또는 로깅과 같은 정리 작업에 유용합니다.

직접 해보기

<?php
require_once 'resource.php';

$testCase = trim(fgets(STDIN));

if ($testCase == "basic_test") {
    echo "=== Start ===\n";
    $r = new Resource("FileHandler");
    echo "Using " . $r->name . "\n";
    unset($r);
    echo "=== End ===\n";
} elseif ($testCase == "auto_destruct_test") {
    $r = new Resource("Logger");
    $r->logMessage("Application started");
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨