Zend 엔진 2.0 설계초안 – 09.객체 삭제

객체 삭제(Forced deletion of objects)

Zend 엔진 1.0에서는 스크립트의 실행이 종료되면 객체들도 자동적으로 제거되기 때문에 스크립트 종료 직전에는 객체를 삭제할 필요가 없습니다만 만약 스크립트를 실행하는 중간에 객체를 삭제할 필요가 있는 경우라면 보통 unset() 함수를 이용하여 객체를 메모리에서 제거하게 됩니다.

  • unset($object);

특정 객체에 대한 별도의 객체 참조가 존재하지 않는다면 unset() 함수를 이용하면 별문제없이 객체를 삭제할 수 있으나 만약 특정 객체에 대한 객체 참조가 존재한다면 이 문장은 제대로 동작하지 않습니다. 객체 참조가 존재하는 한  해당 객체를 강제로 삭제할 수가 없다는 것입니다.

Zend 엔진 2.0에서는 좀더 진보적(?)으로 객체를 삭제할 수 있는 delete 문을 제공합니다.

  • delete $object;

delete는 새롭게 추가된 예약어로써 만약 이전의 작성된 문서에서 사용자 정의 delete()문을 가지고 있다면 이 문서를 Zend 엔진 2.0로 읽혀진다면 parser 에러가 발생할 것입니다.

새롭게 추가된 delete 문은 우선 해당 객체의 소멸자를 호출한 후에 객체가 다른 곳에서 참조되고 있는 경우에도 해당 객체를 강제로 삭제시킵니다. 따라서 해당 객체에 대한 모든 참조는 delete 문에 의해 객체가 삭제되는 순간에 그 의미가 없어지게 됩니다. 만약 delete 문에 의해 삭제된 객체를 참조를 통해 접근한다면 Zend 엔진 2.0은 해당 문서에 대하여 fatal 에러를 발생시킵니다.

답글 남기기