216.73.216.116 TODAY : 2,756

PHP ์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ์ค‘๊ธ‰

๐Ÿ“š PHP ์ค‘๊ธ‰ - 5์ฃผ์ฐจ: PHP ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP) ๊ธฐ์ดˆ - 04 ์ƒ์† (extends)

๐Ÿ“š PHP ์ค‘๊ธ‰ - 5์ฃผ์ฐจ: PHP ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP) ๊ธฐ์ดˆ - 04 ์ƒ์† (extends)
ํ‰์  10.0 ๋ผ์ด์„ผ์Šค free
์‚ฌ์šฉ์žํ‰์  10.0 ์šด์˜์ฒด์ œ
๋‹ค์šด๋กœ๋“œ 1 ํŒŒ์ผํฌ๊ธฐ 0
์ œ์ž‘์‚ฌ LUZENSOFT ๋“ฑ๋ก์ผ 2025-08-01 13:35:38
์กฐํšŒ์ˆ˜ 25
- ์„ค๋ช…

๐Ÿ“š PHP ์ค‘๊ธ‰ - 5์ฃผ์ฐจ: PHP ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP) ๊ธฐ์ดˆ - 04 ์ƒ์† (extends)


PHP ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์—์„œ ์ƒ์†(Inheritance)์€ ๊ธฐ์กด ํด๋ž˜์Šค(๋ถ€๋ชจ ํด๋ž˜์Šค ๋˜๋Š” ์Šˆํผ ํด๋ž˜์Šค)์˜ ์†์„ฑ(property)๊ณผ ๋ฉ”์„œ๋“œ(method)๋ฅผ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค(์ž์‹ ํด๋ž˜์Šค ๋˜๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค)๊ฐ€ ๋ฌผ๋ ค๋ฐ›์•„ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ, ๊ณ„์ธต์ ์ธ ํด๋ž˜์Šค ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PHP์—์„œ๋Š” extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์†์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.



์ƒ์†์˜ ๊ฐœ๋… ๋ฐ ์žฅ์ 

uploadImage

์ƒ์†์€ ํ˜„์‹ค ์„ธ๊ณ„์˜ '๋ถ€๋ชจ-์ž์‹' ๊ด€๊ณ„์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž์‹์€ ๋ถ€๋ชจ์˜ ์œ ์ „์ž๋‚˜ ํŠน์„ฑ์„ ๋ฌผ๋ ค๋ฐ›๋“ฏ์ด, ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„(์†์„ฑ, ๋ฉ”์„œ๋“œ)๋ฅผ ๋ฌผ๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค.

์ƒ์†์˜ ์ฃผ์š” ์žฅ์ :

  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ: ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ •์˜๋œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ  ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ: ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๋ชจ์•„๋‘๋ฉด, ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.

  • ํ™•์žฅ์„ฑ: ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ•„์š”์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(์†์„ฑ, ๋ฉ”์„œ๋“œ)์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ)ํ•˜์—ฌ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณ„์ธต ๊ตฌ์กฐ ๊ตฌ์ถ•: ํด๋ž˜์Šค ๊ฐ„์— ๋…ผ๋ฆฌ์ ์ธ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ณ  ์ดํ•ด๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์ƒ์† ๊ตฌํ˜„

uploadImage


PHP์—์„œ extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์† ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PHP

<?php
// ๋ถ€๋ชจ ํด๋ž˜์Šค (Parent Class / Super Class)
class Animal {
    public $name; // ๋™๋ฌผ ์ด๋ฆ„

    public function __construct($name) {
        $this->name = $name;
        echo "{$this->name}์ด(๊ฐ€) ํƒœ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.". PHP_EOL;
    }

    public function eat() {
        echo "{$this->name}์ด(๊ฐ€) ๋จน์ด๋ฅผ ๋จน์Šต๋‹ˆ๋‹ค.". PHP_EOL;
    }

    public function sleep() {
        echo "{$this->name}์ด(๊ฐ€) ์ž ์„ ์žก๋‹ˆ๋‹ค.". PHP_EOL;
    }
}

// ์ž์‹ ํด๋ž˜์Šค (Child Class / Sub Class) - Animal ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Œ
class Dog extends Animal {
    public function bark() {
        echo "{$this->name}์ด(๊ฐ€) ๋ฉ๋ฉ ์ง–์Šต๋‹ˆ๋‹ค!". PHP_EOL;
    }

    // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ (์˜ค๋ฒ„๋ผ์ด๋”ฉ)ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    public function eat() {
        echo "{$this->name}์ด(๊ฐ€) ์‚ฌ๋ฃŒ๋ฅผ ๋จน์Šต๋‹ˆ๋‹ค.". PHP_EOL; // ๋ถ€๋ชจ์˜ eat()๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘
    }
}

class Cat extends Animal {
    public function meow() {
        echo "{$this->name}์ด(๊ฐ€) ์•ผ์˜น์•ผ์˜น ์›๋‹ˆ๋‹ค.". PHP_EOL;
    }
}

// Dog ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉ
$dog = new Dog("๋ฐ”๋‘‘์ด"); // Animal์˜ __construct ํ˜ธ์ถœ
$dog->eat();             // Dog์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ eat() ํ˜ธ์ถœ
$dog->sleep();           // Animal์˜ sleep() ํ˜ธ์ถœ
$dog->bark();            // Dog์˜ bark() ํ˜ธ์ถœ

echo PHP_EOL;

// Cat ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉ
$cat = new Cat("๋‚˜๋น„"); // Animal์˜ __construct ํ˜ธ์ถœ
$cat->eat();             // Animal์˜ eat() ํ˜ธ์ถœ
// $cat->get_name(); // Error: Call to undefined method Cat::get_name()
$cat->sleep();           // Animal์˜ sleep() ํ˜ธ์ถœ
$cat->meow();            // Cat์˜ meow() ํ˜ธ์ถœ
?>

์ฝ”๋“œ ์„ค๋ช…:

  • Animal ํด๋ž˜์Šค๋Š” name ์†์„ฑ๊ณผ __construct(), eat(), sleep() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์ด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ณตํ†ต์ ์ธ ๋ฉค๋ฒ„์ž…๋‹ˆ๋‹ค.

  • Dog ํด๋ž˜์Šค๋Š” extends Animal์„ ํ†ตํ•ด Animal ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.

  • Dog ํด๋ž˜์Šค๋Š” bark()๋ผ๋Š” ์ž์‹ ๋งŒ์˜ ๊ณ ์œ ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  • Dog ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ eat() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ)ํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Cat ํด๋ž˜์Šค๋„ extends Animal์„ ํ†ตํ•ด Animal ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.

  • Cat ํด๋ž˜์Šค๋Š” meow()๋ผ๋Š” ์ž์‹ ๋งŒ์˜ ๊ณ ์œ ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  • Cat ํด๋ž˜์Šค๋Š” eat() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ, Animal ํด๋ž˜์Šค์˜ eat() ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.



์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค ๋ฉค๋ฒ„ ์ ‘๊ทผ: parent ํ‚ค์›Œ๋“œ

uploadImage


์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์†์„ฑ์— ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ parent ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

PHP

<?php
class ParentClass {
    protected $message = "๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.";

    public function __construct() {
        echo "ParentClass ์ƒ์„ฑ์ž ํ˜ธ์ถœ". PHP_EOL;
    }

    public function displayMessage() {
        echo $this->message. PHP_EOL;
    }
}

class ChildClass extends ParentClass {
    public function __construct() {
        // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ
        parent::__construct();
        echo "ChildClass ์ƒ์„ฑ์ž ํ˜ธ์ถœ". PHP_EOL;
    }

    public function displayParentMessage() {
        // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์†์„ฑ ์ ‘๊ทผ (protected ์ผ ๊ฒฝ์šฐ)
        echo "์ž์‹ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผํ•œ ๋ถ€๋ชจ ๋ฉ”์‹œ์ง€: " . $this->message . PHP_EOL;
    }

    public function callParentMethod() {
        // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        parent::displayMessage();
    }
}

$child = new ChildClass();
$child->displayParentMessage();
$child->callParentMethod();
?>

์ฝ”๋“œ ์„ค๋ช…:

  • ChildClass์˜ __construct() ๋ฉ”์„œ๋“œ์—์„œ parent::__construct()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. (์ž์‹ ํด๋ž˜์Šค์— ์ƒ์„ฑ์ž๊ฐ€ ์ •์˜๋˜๋ฉด ๋ถ€๋ชจ ์ƒ์„ฑ์ž๊ฐ€ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

  • displayParentMessage() ๋ฉ”์„œ๋“œ์—์„œ๋Š” protected๋กœ ์„ ์–ธ๋œ ๋ถ€๋ชจ์˜ message ์†์„ฑ์— $this->message๋กœ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. (private์€ ์ ‘๊ทผ ๋ถˆ๊ฐ€)

  • callParentMethod() ๋ฉ”์„œ๋“œ์—์„œ๋Š” parent::displayMessage()๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ displayMessage() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.



์ƒ์†๊ณผ ์ ‘๊ทผ ์ œ์–ด์ž (public, private, protected)

uploadImage


์ƒ์† ๊ด€๊ณ„์—์„œ ์ ‘๊ทผ ์ œ์–ด์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • public: ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ public ๋ฉค๋ฒ„๋Š” ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์™€ ์™ธ๋ถ€์—์„œ ๋ชจ๋‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • protected: ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ protected ๋ฉค๋ฒ„๋Š” ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์™€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • private: ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ private ๋ฉค๋ฒ„๋Š” ์˜ค์ง ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค์—์„œ๋„ private ๋ฉค๋ฒ„์—๋Š” ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ์˜ private ์†์„ฑ์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ •์˜๋œ public ๋˜๋Š” protected Getter/Setter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

PHP

<?php
class BaseClass {
    public $publicVar = "Public ๋ณ€์ˆ˜";
    protected $protectedVar = "Protected ๋ณ€์ˆ˜";
    private $privateVar = "Private ๋ณ€์ˆ˜ (์ ‘๊ทผ ๋ถˆ๊ฐ€)";

    public function getPrivateVar() {
        return $this->privateVar;
    }
}

class DerivedClass extends BaseClass {
    public function showInheritedVars() {
        echo "Public: " . $this->publicVar . PHP_EOL;       // ์ ‘๊ทผ ๊ฐ€๋Šฅ
        echo "Protected: " . $this->protectedVar . PHP_EOL; // ์ ‘๊ทผ ๊ฐ€๋Šฅ
        // echo "Private: " . $this->privateVar . PHP_EOL;  // ์˜ค๋ฅ˜: private์€ ์ž์‹๋„ ์ง์ ‘ ์ ‘๊ทผ ๋ถˆ๊ฐ€
        echo "Private (via Getter): " . $this->getPrivateVar() . PHP_EOL; // public getter๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ
    }
}

$derived = new DerivedClass();
$derived->showInheritedVars();

echo $derived->publicVar . PHP_EOL; // ์™ธ๋ถ€์—์„œ public ์ ‘๊ทผ ๊ฐ€๋Šฅ
// echo $derived->protectedVar . PHP_EOL; // ์˜ค๋ฅ˜: ์™ธ๋ถ€์—์„œ protected ์ ‘๊ทผ ๋ถˆ๊ฐ€
// echo $derived->privateVar . PHP_EOL;   // ์˜ค๋ฅ˜: ์™ธ๋ถ€์—์„œ private ์ ‘๊ทผ ๋ถˆ๊ฐ€
?>



์ตœ์ข… ํด๋ž˜์Šค: final ํ‚ค์›Œ๋“œ


ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ ์•ž์— final ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด, ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ๋” ์ด์ƒ ์ƒ์†๋  ์ˆ˜ ์—†๊ฑฐ๋‚˜, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋  ์ˆ˜ ์—†๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PHP

<?php
final class CannotBeExtended {
    public function sayHello() {
        echo "ํ™•์žฅ๋  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.". PHP_EOL;
    }
}

// class MyClass extends CannotBeExtended {} // ์˜ค๋ฅ˜: final ํด๋ž˜์Šค๋Š” ์ƒ์† ๋ถˆ๊ฐ€

class BaseWithFinalMethod {
    public function doSomething() {
        echo "์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ". PHP_EOL;
    }

    final public function doFinalSomething() {
        echo "์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€ ๋ฉ”์„œ๋“œ". PHP_EOL;
    }
}

class DerivedWithFinalMethod extends BaseWithFinalMethod {
    public function doSomething() {
        echo "์ž์‹์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ". PHP_EOL;
    }

    // public function doFinalSomething() {} // ์˜ค๋ฅ˜: final ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€
}

$obj = new DerivedWithFinalMethod();
$obj->doSomething();
$obj->doFinalSomething();
?>


PHP์—์„œ ์ƒ์†์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ์›์น™ ์ค‘ ํ•˜๋‚˜๋กœ, ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ƒ์†๊ณผ ์ ‘๊ทผ ์ œ์–ด์ž ์‚ฌ์šฉ์€ ๊ฒฌ๊ณ ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.


์ค‘๊ตญ/ํ•ด์™ธ ์œ ํˆฌ๋ธŒ,์นดํ†ก,์ฐจ์ด๋‚˜ VPN. 1์ผ ๋ฌด๋ฃŒ์ด์šฉ์ฒดํ—˜

https://xn--299ao67b9qbmsf04c.net/