Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 익명 클래스(Anonymous Class) 완벽 정리: 개념부터 활용까지

PHP 익명 클래스란?

익명 클래스(Anonymous Class)는 이름 그대로 클래스 이름이 없는 클래스를 의미합니다. 일회성으로 객체가 필요할 때, 또는 코드 실행 중에 즉석에서 클래스를 정의해야 할 때 유용하게 사용됩니다. 이 기능은 PHP 7 버전부터 도입되었습니다.

익명 클래스는 하나의 표현식(expression) 내부에서 정의되며, 그 결과로 해당 클래스의 객체가 반환됩니다. 정의 방법은 다음과 같이 new class 구문을 사용합니다.

기본 문법

<?php
$obj = new class {
    public function sayhello() {
        echo "Hello World";
    }
};
$obj->sayhello();
?>

익명 클래스는 일반 클래스가 할 수 있는 모든 작업을 수행할 수 있습니다. 즉, 다른 클래스 상속, 인터페이스 구현, 트레이트(trait) 사용 등이 모두 가능합니다.

상속과 인터페이스 구현 예제

다음 예제에서는 익명 클래스가 부모 클래스를 상속하고, 동시에 인터페이스를 구현하는 모습을 보여줍니다.

<?php
class parentclass {
    public function test1() {
        echo "test1 method in parent class\n";
    }
}
interface parentinterface {
    public function test2();
}
$obj = new class() extends parentclass implements parentinterface {
    public function test2() {
        echo "implements test2 method from interface";
    }
};
$obj->test1();
$obj->test2();
?>

실행 결과

test1 method in parent class
implements test2 method from interface

중첩 익명 클래스(Nested Anonymous Class)

익명 클래스는 다른 클래스의 메서드 본문 안에 중첩하여 정의할 수도 있습니다. 다만 주의할 점은, 중첩된 익명 클래스의 객체가 외부 클래스의 private 또는 protected 멤버에는 접근할 수 없다는 것입니다.

중첩 예제

<?php
class testclass {
    public function test1() {
        return new class() {
            public function test2() {
                echo "test2 method of nested anonymous class";
            }
        };
    }
}
$obj2 = new testclass();
$obj2->test1()->test2();
?>

실행 결과

test2 method of nested anonymous class

익명 클래스의 내부 이름

PHP 파서는 내부적으로 사용하기 위해 익명 클래스에 고유한 이름을 자동으로 부여합니다. 아래 예제처럼 get_class() 함수로 확인해볼 수 있습니다.

내부 이름 확인 예제

<?php
var_dump(get_class(new class() {}));
?>

실행 결과

string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"

정리

PHP의 익명 클래스는 이름 없이 즉석에서 객체를 생성할 수 있는 강력한 기능입니다. 간단한 일회용 객체가 필요하거나, 콜백·테스트 더블(mock) 객체를 만들 때 코드를 간결하게 유지하는 데 큰 도움이 됩니다. 단, 외부 클래스의 private/protected 멤버에는 접근할 수 없으므로 이 점을 유의하여 활용하시기 바랍니다.