STUDY/PHP
[객체지향] PHP final 키워드
devmel
2026. 9. 5. 21:30
개념
의미
상속을 통한 확장이나 재정의를 제한하는 키워드
| 적용 대상 | 제한 내용 |
| 클래스 | 해당 클래스를 상속할 수 없음 |
| 메서드 | 자식 클래스에서 해당 메서드를 오버라이딩할 수 없음 |
| 상수와 속성 | 클래스 상수 (PHP 8.1 이상) - 자식 클래스에서 상수 재정의 금지 속성 (PHP 8.4 이상) - 자식 클래스에서 속성 재정의 금지 |
일반 문법
/**
* 클래스에 적용
* => 해당 클래스를 상속하는 자식 클래스를 만들 수 없음
*/
final class FinalClass
{
// 클래스 정의
}
/**
* 메서드에 적용
* => 자식 클래스에서 해당 메서드를 재정의할 수 없음
*/
class MethodExample
{
final public function methodName(): void
{
// 메서드 구현
}
}
/**
* 상수에 적용 (PHP 8.1 이상)
* => 자식 클래스에서 해당 상수를 재정의할 수 없음
*/
class ConstantExample
{
final public const CONSTANT_NAME = "값";
}
/**
* 속성에 적용 (PHP 8.4 이상)
* => 자식 클래스에서 해당 속성을 재정의할 수 없음
* => 객체의 속성값 변경은 가능
*/
class PropertyExample
{
final public string $propertyName = "초기값";
}
ex]
/**
클래스 적용
*/
final class Calculator
{
public function add(int $a, int $b): int
{
return $a + $b;
}
}
$calculator = new Calculator();
echo $calculator->add(10, 20); // 30
// 아래 클래스 선언은 오류 발생
// class CustomCalculator extends Calculator {}
/*
메서드 적용
*/
class Calculator
{
final public function add(int $a, int $b): int
{
return $a + $b;
}
}
class CustomCalculator extends Calculator
{
// 아래 메서드를 선언하면 오류 발생
// public function add(int $a, int $b): int
// {
// return $a + $b + 100;
// }
}
$calculator = new CustomCalculator();
echo $calculator->add(10, 20); // 30
/**
상수 적용
*/
class Response
{
final public const SUCCESS = 200;
}
class CustomResponse extends Response
{
// 아래 상수를 선언하면 오류 발생
// public const SUCCESS = 201;
}
echo CustomResponse::SUCCESS; // 200
/**
속성 적용
*/
class UserProfile
{
final public string $name = "Kim";
}
class CustomProfile extends UserProfile
{
// 아래 속성을 선언하면 오류 발생
// public string $name = "Lee";
}
$user = new CustomProfile();
$user->name = "Lee";
echo $user->name; // Lee