
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ์ค๊ธ
๐ PHP ์ค๊ธ - 6์ฃผ์ฐจ: OOP ์ฌํ ๋ฐ ๋์์ธ ํจํด ์๊ฐ - 02 ํธ๋ ์ดํธ (Trait)
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-08-06 13:21:54 | |
์กฐํ์ | 26 |
๐ PHP ์ค๊ธ - 6์ฃผ์ฐจ: OOP ์ฌํ ๋ฐ ๋์์ธ ํจํด ์๊ฐ - 02 ํธ๋ ์ดํธ (Trait)
์ง๋ ์๊ฐ์๋ #PHP #๊ฐ์ฒด_์งํฅ_ํ๋ก๊ทธ๋๋ฐ(OOP)์ ํต์ฌ ๊ฐ๋ ์ธ #์ถ์_ํด๋์ค์ #์ธํฐํ์ด์ค์ ๋ํด ํ์ตํ์ต๋๋ค.
์ด๋ฒ ์๊ฐ์๋ #๋ค์ค_์์์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ #์ฝ๋_์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ธ #ํธ๋ ์ดํธ(Trait)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
ํธ๋ ์ดํธ(Trait)๋?
#ํธ๋ ์ดํธ(Trait)๋ #ํด๋์ค์_์ฌ์ฌ์ฉ๋ _๋ฉ์๋_์งํฉ์_์ ์ํ๋_๋ฉ์ปค๋์ฆ์ ๋๋ค. PHP๋ ๋จ์ผ ์์๋ง ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ์ ๋์์ ๋ฌผ๋ ค๋ฐ์ ์ ์์ต๋๋ค. ํธ๋ ์ดํธ๋ ์ด๋ฌํ ๋จ์ผ ์์์ ์ ์ฝ์ ๋ณด์ํ์ฌ, ๋ง์น ์ฌ๋ฌ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ๋ ๊ฒ์ฒ๋ผ ์ฌ๋ฌ ํธ๋ ์ดํธ์ ๊ธฐ๋ฅ์ ํ ํด๋์ค์ '์ฃผ์ (inject)'ํ ์ ์๊ฒ ํด์ค๋๋ค.
ํธ๋ ์ดํธ๋ ํด๋์ค๊ฐ ์๋๋ฉฐ, ๊ทธ ์์ฒด๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋์ use
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค์ ํฌํจ(include)๋ฉ๋๋ค.
์ฃผ์ ํน์ง:
trait
ํค์๋: ํธ๋ ์ดํธ ์ ์ธ ์trait
ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.use
ํค์๋: ํด๋์ค ๋ด์์use
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ด์์ ํธ๋ ์ดํธ๋ฅผ ํฌํจ์ํฌ ์ ์์ต๋๋ค.๋ฉ์๋ ์ฌ์ฌ์ฉ: ์ฌ๋ฌ ํด๋์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๋ฉ์๋๋ค์ ํธ๋ ์ดํธ๋ก ๋ฌถ์ด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋ค์ค ํธ๋ ์ดํธ ์ฌ์ฉ: ํ๋์ ํด๋์ค์์ ์ฌ๋ฌ ํธ๋ ์ดํธ๋ฅผ ์ผํ(
,
)๋ก ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.์ฐ์ ์์: ํธ๋ ์ดํธ์ ๋ฉ์๋๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋(override)ํ๋ฉฐ, ํด๋์ค ์์ฒด์ ๋ฉ์๋๋ ํธ๋ ์ดํธ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํฉ๋๋ค.
์ถฉ๋ ํด๊ฒฐ: ์ฌ๋ฌ ํธ๋ ์ดํธ์์ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ์์ ๊ฒฝ์ฐ,
insteadof
์as
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ง ๋ช ์์ ์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ชฉ์ :
๋จ์ผ ์์์ ํ๊ณ ๊ทน๋ณต: ํน์ ๊ธฐ๋ฅ(์: ๋ก๊น , ์๋ฆผ)์ ์ฌ๋ฌ ํด๋์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์ถ๊ฐํด์ผ ํ ๋, ์์ ๊ณ์ธต์ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์๊ณ ๋ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ฐํ ์ฝ๋ ๊ตฌ์ฑ: ํน์ ๊ธฐ๋ฅ์ด ํ์ํ ํด๋์ค์๋ง ์ ํ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ, ๋ ์ ์ฐํ๊ณ #๊ฐ๋ ์ฑ_๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ค๋ณต ์ฝ๋ ์ ๊ฑฐ: ์ฌ๋ฌ ํด๋์ค์ ํฉ์ด์ ธ ์๋ ๋์ผํ ๋ก์ง์ ํธ๋ ์ดํธ๋ก ๋ชจ์, #์ ์ง๋ณด์๋ฅผ_์ฉ์ดํ๊ฒ ํฉ๋๋ค.
ํธ๋ ์ดํธ ์ฌ์ฉ ์์
๊ฐ๋จํ ํธ๋ ์ดํธ ์์ ๋ฅผ ํตํด ๊ทธ ์ฌ์ฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ๋จ์ผ ํธ๋ ์ดํธ ์ฌ์ฉ
PHP
<?php
// SayHello ํธ๋ ์ดํธ ์ ์
trait SayHello {
public function sayHello() {
echo "์๋
ํ์ธ์!". PHP_EOL;
}
}
// ํด๋์ค์์ ํธ๋ ์ดํธ ์ฌ์ฉ
class Person {
use SayHello;
public $name;
public function __construct($name) {
$this->name = $name;
}
public function introduce() {
echo "์ ๋ {$this->name}์
๋๋ค.". PHP_EOL;
}
}
$person = new Person("๊น์ฒ ์");
$person->sayHello(); // ์๋
ํ์ธ์! (ํธ๋ ์ดํธ์ ๋ฉ์๋ ์ฌ์ฉ)
$person->introduce(); // ์ ๋ ๊น์ฒ ์์
๋๋ค. (ํด๋์ค ์์ฒด์ ๋ฉ์๋ ์ฌ์ฉ)
์ด ์์ ์์๋ Person
ํด๋์ค๊ฐ SayHello
ํธ๋ ์ดํธ์ sayHello()
๋ฉ์๋๋ฅผ ๋ง์น ์์ ์ ๋ฉ์๋์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ 2: ๋ค์ค ํธ๋ ์ดํธ ์ฌ์ฉ ๋ฐ ๋ฉ์๋ ์ถฉ๋ ํด๊ฒฐ
PHP
<?php
// SayHello ํธ๋ ์ดํธ ์ ์
trait SayHello {
public function sayHello() {
echo "์๋
ํ์ธ์! (SayHello ํธ๋ ์ดํธ)". PHP_EOL;
}
}
// SayBye ํธ๋ ์ดํธ ์ ์
trait SayBye {
public function sayHello() {
echo "์๋
ํ ๊ฐ์ธ์! (SayBye ํธ๋ ์ดํธ)". PHP_EOL;
}
}
// ๋ ํธ๋ ์ดํธ ๋ชจ๋ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋(sayHello)๋ฅผ ๊ฐ์ง
class Greeter {
// ํธ๋ ์ดํธ์์ ๋ฉ์๋ ์ถฉ๋ ๋ฐ์
use SayHello, SayBye {
// ์ถฉ๋ ํด๊ฒฐ: SayBye์ sayHello()๋ฅผ ์ฌ์ฉํ๋,
// SayHello์ sayHello()๋ sayHelloFromSayHello()๋ผ๋ ๋ณ์นญ์ผ๋ก ์ฌ์ฉ
SayBye::sayHello insteadof SayHello;
SayHello::sayHello as sayHelloFromSayHello;
}
public function greet() {
// Greeter ํด๋์ค๋ SayBye์ sayHello()๋ฅผ ์ฌ์ฉ
$this->sayHello();
// ๋ณ์นญ์ ์ฌ์ฉํด SayHello์ ๋ฉ์๋๋ ํธ์ถ ๊ฐ๋ฅ
$this->sayHelloFromSayHello();
}
}
$greeter = new Greeter();
$greeter->greet();
// ๊ฒฐ๊ณผ:
// ์๋
ํ ๊ฐ์ธ์! (SayBye ํธ๋ ์ดํธ)
// ์๋
ํ์ธ์! (SayHello ํธ๋ ์ดํธ)
?>
์ด์ฒ๋ผ #ํธ๋ ์ดํธ_์ถฉ๋์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ insteadof
์ as
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๋๋ก ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.
์ถ์ ํด๋์ค, ์ธํฐํ์ด์ค, ํธ๋ ์ดํธ ๋น๊ต
ํน์ง | ์ถ์ ํด๋์ค(Abstract Class) | ์ธํฐํ์ด์ค(Interface) | ํธ๋ ์ดํธ(Trait) |
---|---|---|---|
๋ชฉ์ | ์์ ๊ณ์ธต ์ ์ ๋ฐ ๊ณตํต ๊ธฐ๋ฅ ์ ๊ณต (IS-A ๊ด๊ณ) | ํ๋ ๊ท์ฝ ์ ์ (CAN-DO ๊ด๊ณ) | ์ฝ๋ ์ฌ์ฌ์ฉ ๋ฐ ๋ฏน์ค์ธ(Mixin) ๊ธฐ๋ฅ ์ถ๊ฐ |
๋ฉ์๋ | ์ถ์ ๋ฉ์๋์ ์ผ๋ฐ ๋ฉ์๋ ๋ชจ๋ ํฌํจ | ์ถ์ ๋ฉ์๋๋ง ํฌํจ | ์ผ๋ฐ ๋ฉ์๋์ ์ถ์ ๋ฉ์๋ ๋ชจ๋ ํฌํจ |
์์ฑ/์์ | ์์ฑ ํฌํจ ๊ฐ๋ฅ | ์์ ํฌํจ ๊ฐ๋ฅ | ์์ฑ ํฌํจ ๊ฐ๋ฅ |
์ฌ์ฉ ๋ฐฉ์ |
|
|
|
ํ๊ณ | ๋ค์ค ์์ ๋ถ๊ฐ | ๊ตฌํ ๋ฉ์๋(body) ๊ฐ์ง ์ ์์ | ์์ ๊ด๊ณ๊ฐ ์๋๋ฏ๋ก ํ์
ํํธ( |
#ํธ๋ ์ดํธ๋ ์์ ๊ด๊ณ๋ฅผ ํ์ฑํ์ง ์์ผ๋ฉด์ ํ์ํ ๊ธฐ๋ฅ์ ํด๋์ค์ ์ ์ฐํ๊ฒ ์์ด ๋ฃ์ ์ ์๋ค๋ ์ ์์ #๋ฏน์ค์ธ(Mixin)๊ณผ ์ ์ฌํ ์ญํ ์ ํฉ๋๋ค.
์ด๋ฅผ ํตํด #PHP_OOP์ #์ค๊ณ_์์ ๋๋ฅผ ํฌ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
๊ณ ์ ์์ดํผ, ์5,500์, VPN, ์ฉ๋๋ณ ํด๋ฆฐ์์ดํผ ์ ๊ณต, ๋ฌด๋ฃํ ์คํธ
https://xn--299ao67b9qbmsf04c.net/