216.73.216.116 TODAY : 2,765

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

 > 

PHP - ์ค‘๊ธ‰

๐Ÿ“š PHP ์ค‘๊ธ‰ - 6์ฃผ์ฐจ: OOP ์‹ฌํ™” ๋ฐ ๋””์ž์ธ ํŒจํ„ด ์†Œ๊ฐœ - 02 ํŠธ๋ ˆ์ดํŠธ (Trait)

๐Ÿ“š 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)๋ฉ๋‹ˆ๋‹ค.

uploadImage


์ฃผ์š” ํŠน์ง•:

  • 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) ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๋ฉ”์„œ๋“œ

์ถ”์ƒ ๋ฉ”์„œ๋“œ์™€ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ ํฌํ•จ

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ํฌํ•จ

์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ์™€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ ํฌํ•จ

์†์„ฑ/์ƒ์ˆ˜

์†์„ฑ ํฌํ•จ ๊ฐ€๋Šฅ

์ƒ์ˆ˜ ํฌํ•จ ๊ฐ€๋Šฅ

์†์„ฑ ํฌํ•จ ๊ฐ€๋Šฅ

์‚ฌ์šฉ ๋ฐฉ์‹

extends๋ฅผ ํ†ตํ•ด ๋‹จ์ผ ์ƒ์†

implements๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ๊ตฌํ˜„

use๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ํฌํ•จ(inclusion)

ํ•œ๊ณ„

๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€

๊ตฌํ˜„ ๋ฉ”์„œ๋“œ(body) ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ

์ƒ์† ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํƒ€์ž… ํžŒํŠธ(instanceof)์— ์ง์ ‘ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ (์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ณด์™„)


#ํŠธ๋ ˆ์ดํŠธ๋Š” ์ƒ์† ๊ด€๊ณ„๋ฅผ ํ˜•์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ํด๋ž˜์Šค์— ์œ ์—ฐํ•˜๊ฒŒ ์„ž์–ด ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ #๋ฏน์Šค์ธ(Mixin)๊ณผ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด #PHP_OOP์˜ #์„ค๊ณ„_์ž์œ ๋„๋ฅผ ํฌ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ณ ์ •์•„์ดํ”ผ, ์›”5,500์›, VPN, ์šฉ๋„๋ณ„ ํด๋ฆฐ์•„์ดํ”ผ ์ œ๊ณต, ๋ฌด๋ฃŒํ…Œ์ŠคํŠธ

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