개발블로그

[객체지향] PHP final 키워드 본문

STUDY/PHP

[객체지향] PHP final 키워드

devmel 2026. 9. 5. 21:30
Contents 접기
 

개념

 

의미

상속을 통한 확장이나 재정의를 제한하는 키워드

적용 대상 제한 내용
클래스 해당 클래스를 상속할 수 없음
메서드 자식 클래스에서 해당 메서드를 오버라이딩할 수 없음
상수와 속성 클래스 상수 (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