
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ์ค๊ธ
๐ PHP ์ค๊ธ - 6์ฃผ์ฐจ: OOP ์ฌํ ๋ฐ ๋์์ธ ํจํด ์๊ฐ - 01 ์ถ์ ํด๋์ค, ์ธํฐํ์ด์ค
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-08-04 13:56:34 | |
์กฐํ์ | 16 |
๐ PHP ์ค๊ธ - 6์ฃผ์ฐจ: OOP ์ฌํ ๋ฐ ๋์์ธ ํจํด ์๊ฐ - 01 ์ถ์ ํด๋์ค, ์ธํฐํ์ด์ค
์ง๋ ์ฃผ์ #PHP #๊ฐ์ฒด_์งํฅ_ํ๋ก๊ทธ๋๋ฐ(OOP)์ #๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ #์์์ ๋ํด ํ์ตํ์ต๋๋ค. ์ด๋ฒ ์ฃผ์๋ OOP์ ๋ ์ฌํ๋ ๊ฐ๋ ์ธ #์ถ์_ํด๋์ค(Abstract Classes)์ #์ธํฐํ์ด์ค(Interfaces)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ ๊ฐ์ง๋ #์ ์ฐํ๊ณ #ํ์ฅ_๊ฐ๋ฅํ๋ฉฐ #๊ฒฌ๊ณ ํ_๊ฐ์ฒด_์งํฅ_์ค๊ณ_ํจํด์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ธ ์์์ ๋๋ค.
์ถ์ ํด๋์ค (Abstract Classes)
#์ถ์_ํด๋์ค๋ ๊ทธ ์์ฒด๋ก๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ง๋ง, ๋ค๋ฅธ ํด๋์ค๋ค์ด #์์๋ฐ์_์ฌ์ฉํ _์_์๋_๋ผ๋_ํด๋์ค์ ๋๋ค. ์ถ์ ํด๋์ค๋ #์ถ์_๋ฉ์๋(Abstract Methods)์ ์ผ๋ฐ ๋ฉ์๋, ์์ฑ์ ๋ชจ๋ ํฌํจํ ์ ์์ต๋๋ค.
์ฃผ์ ํน์ง:
abstract
ํค์๋: ํด๋์ค ์ ์ธ ์์abstract
ํค์๋๋ฅผ ๋ถ์ฌ ์ถ์ ํด๋์ค์์ ๋ช ์ํฉ๋๋ค.๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ: ์ถ์ ํด๋์ค๋
new
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ์ธ์คํด์คํํ ์ ์์ต๋๋ค. ๋ฐ๋์ ์์ ํด๋์ค๊ฐ ์ด๋ฅผ ์์๋ฐ์ ๊ตฌํํด์ผ ํฉ๋๋ค.์ถ์ ๋ฉ์๋ ํฌํจ ๊ฐ๋ฅ: ์ถ์ ๋ฉ์๋๋ ์ ์ธ๋ง ์๊ณ ๊ตฌํ(๋ณธ๋ฌธ)์ด ์๋ ๋ฉ์๋์ ๋๋ค.
abstract
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ์ธ๋ฏธ์ฝ๋ก (;)์ผ๋ก ๋๋ฉ๋๋ค.๊ฐ์ ๊ตฌํ: ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ์์ ํด๋์ค๋ ๋ถ๋ชจ์ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํฉ๋๋ค. ๋ง์ฝ ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ์ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์์ผ๋ฉด, ๊ทธ ์์ ํด๋์ค๋ ์ถ์ ํด๋์ค๊ฐ ๋์ด์ผ ํฉ๋๋ค.
์ผ๋ฐ ๋ฉ์๋ ๋ฐ ์์ฑ ํฌํจ: ์ถ์ ํด๋์ค๋ ์ถ์ ๋ฉ์๋ ์ธ์ ์ผ๋ฐ(๊ตฌํ๋) ๋ฉ์๋์ ์์ฑ๋ ๊ฐ์ง ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ชฉ์ :
๊ฐ์ ์ฑ ๋ถ์ฌ: ํน์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํ๋๋ก ๊ฐ์ ํ์ฌ, ์ผ๊ด๋ ๊ตฌ์กฐ์ ๋์์ ๋ณด์ฅํฉ๋๋ค.
๊ณตํต ๊ธฐ๋ฅ ์ ๊ณต: ์ถ์ ํด๋์ค์ ์ผ๋ฐ ๋ฉ์๋๋ฅผ ์ ์ํ์ฌ, ๋ชจ๋ ์์ ํด๋์ค์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด: ํน์ ์์ ์ ํฐ ํ(ํ ํ๋ฆฟ)์ ์ถ์ ํด๋์ค์์ ์ ์ํ๊ณ , ์ธ๋ถ์ ์ธ ๋จ๊ณ๋ ์ถ์ ๋ฉ์๋๋ก ๋จ๊ฒจ๋์ด ์์ ํด๋์ค์์ ๊ตฌํํ๊ฒ ํ ๋ ์ ์ฉํฉ๋๋ค.
์์:
PHP
<?php
// ์ถ์ ํด๋์ค ์ ์
abstract class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
// ์ถ์ ๋ฉ์๋: ์์ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํด์ผ ํจ
abstract public function makeSound();
// ์ผ๋ฐ ๋ฉ์๋: ์์ ํด๋์ค์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
public function eat() {
echo "{$this->name}์ด(๊ฐ) ๋จน์ด๋ฅผ ๋จน์ต๋๋ค.". PHP_EOL;
}
}
// ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ์์ ํด๋์ค
class Dog extends Animal {
public function makeSound() {
echo "{$this->name}์ด(๊ฐ) ๋ฉ๋ฉ ์ง์ต๋๋ค.". PHP_EOL;
}
public function fetch() {
echo "{$this->name}์ด(๊ฐ) ๊ณต์ ๋ฌผ์ด์ต๋๋ค.". PHP_EOL;
}
}
class Cat extends Animal {
public function makeSound() {
echo "{$this->name}์ด(๊ฐ) ์ผ์น์ผ์น ์๋๋ค.". PHP_EOL;
}
}
// Animal ํด๋์ค๋ ์ง์ ์ธ์คํด์คํ ํ ์ ์์ (์ค๋ฅ ๋ฐ์)
// $animal = new Animal("๋๋ฌผ");
$dog = new Dog("๋ฐ๋์ด");
$dog->makeSound(); // ๋ฉ๋ฉ ์ง์ต๋๋ค.
$dog->eat(); // ๋จน์ด๋ฅผ ๋จน์ต๋๋ค.
$dog->fetch(); // ๊ณต์ ๋ฌผ์ด์ต๋๋ค.
echo PHP_EOL;
$cat = new Cat("๋๋น");
$cat->makeSound(); // ์ผ์น์ผ์น ์๋๋ค.
$cat->eat(); // ๋จน์ด๋ฅผ ๋จน์ต๋๋ค.
?>
์ธํฐํ์ด์ค (Interfaces)
#์ธํฐํ์ด์ค๋ ํด๋์ค๊ฐ ๊ตฌํํด์ผ ํ #๋ฉ์๋์_๋ชฉ๋ก๋ง_์ ์ํฉ๋๋ค. ์ธํฐํ์ด์ค๋ ์์ฑ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๋ชจ๋ ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก #์ถ์_๋ฉ์๋์ ๋๋ค. ์ฆ, ์ธํฐํ์ด์ค๋ ํน์ ํด๋์ค๊ฐ ๊ฐ์ ธ์ผ ํ #๊ธฐ๋ฅ_์งํฉ์_๋ํ_๊ท์ฝ(Contract)์ ์ ์ํฉ๋๋ค.
์ฃผ์ ํน์ง:
interface
ํค์๋: ์ธํฐํ์ด์ค ์ ์ธ ์์interface
ํค์๋๋ฅผ ๋ถ์ ๋๋ค.๋ฉ์๋๋ง ์ ์: ์ธํฐํ์ด์ค๋ ๋ฉ์๋ ์๊ทธ๋์ฒ(์ด๋ฆ, ๋งค๊ฐ๋ณ์, ๋ฐํ ํ์ )๋ง ์ ์ํ๋ฉฐ, ๊ตฌํ(๋ณธ๋ฌธ)์ ์์ต๋๋ค. ์์ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค.
์์ ํฌํจ ๊ฐ๋ฅ: ์ธํฐํ์ด์ค๋ ์์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. (PHP 5.3๋ถํฐ)
implements
ํค์๋: ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋๋implements
ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ค์ค ๊ตฌํ: PHP ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค. (๋ฐ๋ฉด, ํด๋์ค๋ ๋จ ํ๋์ ๋ถ๋ชจ ํด๋์ค๋ง ์์๋ฐ์ ์ ์์ต๋๋ค.)
๊ฐ์ ๊ตฌํ: ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ์ธํฐํ์ด์ค์ ์ ์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ฐ๋์
public
์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค.
์ฌ์ฉ ๋ชฉ์ :
ํ๋ ๊ท์ฝ ์ ์: ํน์ ์ญํ ์ ์ํํ๋ ํด๋์ค๋ค์ด ๊ฐ์ ธ์ผ ํ ๊ณตํต๋ ํ๋(๋ฉ์๋)์ ๊ฐ์ ํ์ฌ, ์ผ๊ด๋ API๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
๋คํ์ฑ(Polymorphism) ๊ตฌํ: ์ฌ๋ฌ ํด๋์ค๊ฐ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด, ํด๋น ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ๋์ผํ ๋ฉ์๋ ํธ์ถ๋ก ๋ค์ํ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ์ด๋ #๋คํ์ฑ ๊ตฌํ์ ํต์ฌ์ ๋๋ค.
๊ฒฐํฉ๋ ๋ฎ์ถ๊ธฐ: ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ์์กดํ๋ ๋์ ์ธํฐํ์ด์ค์ ์์กดํจ์ผ๋ก์จ, ์์คํ ์ #๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ #์ ์ง๋ณด์์ฑ ๋ฐ #ํ ์คํธ_์ฉ์ด์ฑ์ ๋์ ๋๋ค.
์์:
PHP
<?php
// ์ธํฐํ์ด์ค ์ ์
interface Logger {
public function log(string $message);
}
// ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค 1
class FileLogger implements Logger {
private $logFile;
public function __construct(string $logFile) {
$this->logFile = $logFile;
}
public function log(string $message) {
file_put_contents($this->logFile, date('Y-m-d H:i:s') . " [FILE] " . $message . PHP_EOL, FILE_APPEND);
echo "ํ์ผ์ ๋ก๊ทธ ๊ธฐ๋ก: {$message}". PHP_EOL;
}
}
// ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค 2
class DatabaseLogger implements Logger {
public function log(string $message) {
// ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก์ง (์๋ต)
echo "๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก๊ทธ ๊ธฐ๋ก: {$message}". PHP_EOL;
}
}
// ๋คํ์ฑ ํ์ฉ ์์
function processLog(Logger $logger, string $msg) {
$logger->log($msg);
}
$fileLogger = new FileLogger('application.log');
$dbLogger = new DatabaseLogger();
processLog($fileLogger, "์ ํ๋ฆฌ์ผ์ด์
์์."); // ํ์ผ์ ๋ก๊ทธ ๊ธฐ๋ก
processLog($dbLogger, "์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ฑ๊ณต."); // ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก๊ทธ ๊ธฐ๋ก
?>
์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ฐจ์ด์ ๋ฐ ๊ณตํต์
ํน์ง | ์ถ์ ํด๋์ค | ์ธํฐํ์ด์ค |
---|---|---|
๋ชฉ์ | IS-A ๊ด๊ณ (์ข ๋ฅ) ๊ธฐ๋ฐ์ ์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ฆ, ๋ถ๋ถ ๊ตฌํ ๋ฐ ๊ณตํต ๊ธฐ๋ฅ ์ ๊ณต | CAN-DO ๊ด๊ณ (์ญํ /๋ฅ๋ ฅ) ๊ธฐ๋ฐ์ ํ๋ ๊ท์ฝ ์ ์ |
๊ตฌํ ์ฌ๋ถ | ์ถ์ ๋ฉ์๋(์ ์ธ) + ์ผ๋ฐ ๋ฉ์๋(๊ตฌํ) ๊ฐ๋ฅ | ์ค์ง ๋ฉ์๋ ์ ์ธ๋ง ๊ฐ๋ฅ (๋ชจ๋ ๋ฉ์๋๋ ์ถ์) |
์์ฑ | ์์ฑ ๊ฐ์ง ์ ์์ | ์์ฑ ๊ฐ์ง ์ ์์ (์์๋ ๊ฐ๋ฅ) |
์ ๊ทผ ์ ์ด์ |
| ๋ชจ๋ ๋ฉ์๋๋ ์๋ฌต์ ์ผ๋ก |
์์/๊ตฌํ |
|
|
์ธ์คํด์คํ | ์ง์ ์ธ์คํด์คํ ๋ถ๊ฐ | ์ง์ ์ธ์คํด์คํ ๋ถ๊ฐ |
Sheets๋ก ๋ด๋ณด๋ด๊ธฐ
๊ณตํต์ :
๋ชจ๋ ์ง์ ์ธ์คํด์คํํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ํด๋์ค์์ ์์/๊ตฌํํ์ฌ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ ์ ์์ด ์์/๊ตฌํ ํด๋์ค์์ ํน์ ๋ฉ์๋๋ฅผ ๊ฐ์ ๋ก ๊ตฌํํ๊ฒ ํ ์ ์์ต๋๋ค.
#์ถ์_ํด๋์ค์ #์ธํฐํ์ด์ค๋ #PHP #๊ฐ์ฒด_์งํฅ_์ค๊ณ์์ #์ ์ฐ์ฑ๊ณผ #ํ์ฅ์ฑ์ ๋ถ์ฌํ๋ ์ค์ํ ๋๊ตฌ์ ๋๋ค. ์ด๋ค์ ์ ์ ํ ํ์ฉํ๋ฉด #์ฝ๋์_์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ #์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ฉฐ, #๋คํ์ฑ์ ํตํด #๊ฒฌ๊ณ ํ_์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๋ค์ ์ฃผ์๋ #๋์์ธ_ํจํด์ ๊ฐ๋ ์ ์๊ฐํ๋ฉฐ, ์ด๋ค์ด ์ด๋ป๊ฒ ์ค์ ์ฝ๋ ์ค๊ณ์ ์ ์ฉ๋๋์ง ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
์๋, ์์ ์ฑ ํ์ค. ๋๊น์์ด ๋น ๋ฅธ VPN. ๊ณ ํ์ง ๋ธ์ดํผ์ ๋ฌด๋ฃ์ฒดํ!
https://xn--299ao67b9qbmsf04c.net/