
DateTimeImmutable 클래스의 setDate 메소드는 날짜를 변경할 때, 이전 날짜의 데이터를 삭제하는 것처럼 보입니다. 하지만, 실제로 데이터가 삭제되는 것이 아니라, 이전 날짜의 데이터가 존재하지 않기 때문에 삭제된 것처럼 보입니다.
이유는 DateTimeImmutable 클래스가 불변 객체라는 것입니다. 불변 객체는 생성 후 데이터를 변경할 수 없으며, 새로운 객체를 생성하여 데이터를 변경합니다. 따라서, setDate 메소드를 호출하면 새로운 객체가 생성되어 이전 날짜의 데이터가 삭제된 것처럼 보입니다.
하지만, 실제로 이전 날짜의 데이터는 삭제되지 않고, 새로운 객체가 생성되어 있습니다. 이를 확인하기 위해, 다음 코드를 실행해 보세요.
#hostingforum.kr
php
$date = new DateTimeImmutable('2022-01-01 12:00:00');
echo $date->format('Y-m-d H:i:s') . "n"; // 2022-01-01 12:00:00
$date = $date->setDate(2022, 1, 2);
echo $date->format('Y-m-d H:i:s') . "n"; // 2022-01-02 00:00:00
var_dump($date === $date->setDate(2022, 1, 2)); // bool(true)
위 코드에서, $date === $date->setDate(2022, 1, 2) 은 true를 출력합니다. 이는 두 객체가 동일한 객체라는 것을 의미합니다. 따라서, 이전 날짜의 데이터는 삭제되지 않고, 새로운 객체가 생성되어 있습니다.
2025-07-30 19:08