Menu
Coddy logo textTech

매직 메서드 소개

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

Magic method은 이중 밑줄(__)로 시작하며 특정 이벤트나 동작에 대한 응답으로 PHP에 의해 automatically called되는 PHP의 특수한 method입니다. 이미 두 가지를 사용해 보았습니다: __construct()__destruct().

이러한 method를 사용하면 PHP의 내부 동작에 연결하여 객체가 일반적인 작업에 응답하는 방식을 사용자 지정할 수 있습니다.

예를 들어, 객체를 출력하려고 하면 어떤 일이 일어날까요? 또는 존재하지 않는 속성에 액세스하면 어떻게 될까요? Magic method를 사용하면 이러한 상황을 제어할 수 있습니다.

다음은 가장 일반적으로 사용되는 magic method에 대한 간단한 개요입니다:

메서드트리거되는 경우
__construct()object가 생성될 때
__destruct()object가 소멸될 때
__toString()object가 string으로 사용될 때
__get()정의되지 않은 properties에 액세스할 때
__set()정의되지 않은 properties를 설정할 때
__call()정의되지 않은 method를 호출할 때
__clone()object가 복제될 때
<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book;

출력:

Book: PHP Mastery

__toString() 없이 객체를 echo하려고 하면 오류가 발생합니다. magic method는 이 동작을 가로채 대신 문자열 표현을 반환합니다. 다음 수업에서는 각 magic method를 자세히 살펴보겠습니다.

challenge icon

챌린지

쉬움

magic method을 소개하는 영화 카탈로그 시스템을 만들어 보겠습니다. Movie class를 만들고, __construct()를 사용해 영화 데이터를 초기화하며, object가 출력될 때 깔끔한 string 표현을 제공하도록 __toString()을 사용합니다.

코드를 두 개의 파일로 구성합니다.

  • Movie.php: 카탈로그의 영화를 나타내는 Movie class를 Create합니다. constructor promotion을 사용해 $title (string), $director (string), $year (integer)에 대한 private properties를 define합니다. __toString() magic method를 Implement하여 formatted string인 "[title] ([year]) - Directed by [director]"을 Return합니다. 이를 통해 별도의 method를 호출하지 않고도 movie object를 직접 echo할 수 있습니다.
  • main.php: Movie 파일을 포함합니다. 세 가지 입력, 즉 movie title, director 이름, release year를 받습니다. 이 values를 using하여 Movie instance를 Create합니다(year는 integer로 변환). 그런 다음 movie object를 직접 echo하면 됩니다. 출력 생성을 위해 __toString() method가 automatically called됩니다.

__toString()의 magic은 object가 string context에서 사용될 때마다 PHP가 automatically 이를 호출한다는 점입니다. echo $movie->getInfo();를 작성하는 대신 간단히 echo $movie;라고 작성하면 PHP가 자동으로 변환을 처리합니다. 따라서 object를 더 직관적으로 사용할 수 있습니다.

직접 해보기

<?php

require_once 'Movie.php';

// 입력 읽기
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));

// TODO: 입력 값을 사용하여 Movie 인스턴스 생성

// TODO: movie 객체를 직접 Echo (__toString() 메서드가 자동으로 호출됩니다)

?>
quiz icon실력 점검

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

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

직접 연습해 보세요: 온라인 PHP 컴파일러