📚 PHP 중급 - 5주차: PHP 객체 지향 프로그래밍 (OOP) 기초 - 02 생성자 (__construct)

2025. 7. 29. 13:50프로그램/PHP 중급

📚 PHP 중급 - 5주차: PHP 객체 지향 프로그래밍 (OOP) 기초 - 02 생성자 (__construct)

📚 PHP 중급 - 5주차: PHP 객체 지향 프로그래밍 (OOP) 기초 - 02 생성자 (__construct)



PHP 객체 지향 프로그래밍(OOP)에서 #생성자(__construct)는 클래스의 #객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 이 생성자를 통해 객체의 초기 상태를 설정하거나, 객체 사용에 필요한 초기 작업을 수행할 수 있습니다.

 


 

생성자 선언 및 사용

PHP 생성자 선언 및 사용

PHP에서 생성자는 __construct()라는 특별한 이름으로 정의합니다. 이 메서드는 일반적인 메서드와 동일하게 매개변수를 가질 수 있으며, 이를 통해 객체 생성 시 외부로부터 값을 전달받을 수 있습니다.

PHP
 
<?php
class Car {
    public $brand;
    public $model;

    // 생성자 정의
    public function __construct($brand, $model) {
        $this->brand = $brand;
        $this->model = $model;
        echo "새로운 {$this->brand} {$this->model} 차량이 생성되었습니다.". "<br>";
    }

    public function getCarInfo() {
        return "브랜드: {$this->brand}, 모델: {$this->model}". "<br>";
    }
}

// 객체 생성 시 생성자 자동 호출
$myCar = new Car("Hyundai", "Sonata");
echo $myCar->getCarInfo();

$yourCar = new Car("Kia", "K5");
echo $yourCar->getCarInfo();
?>

위 예제에서 Car 클래스의 __construct 메서드는 $brand와 $model 두 개의 매개변수를 받습니다. new Car("Hyundai", "Sonata")와 같이 객체를 생성하면, 이 매개변수들이 생성자로 전달되어 #$this->brand와 #$this->model에 각각 "Hyundai"와 "Sonata"가 할당됩니다.

 


 

선택적 매개변수를 가진 생성자

PHP 선택적 매개변수를 가진 생성자

생성자에도 일반 함수처럼 #선택적 매개변수를 사용할 수 있습니다. 이를 통해 객체 생성 시 유연성을 높일 수 있습니다.

PHP
 
<?php
class User {
    public $name;
    public $age;

    public function __construct($name, $age = null) { // $age는 선택적 매개변수
        $this->name = $name;
        $this->age = $age;
        echo "이름: {$this->name}";
        if ($this->age !== null) {
            echo ", 나이: {$this->age}";
        }
        echo " 사용자가 생성되었습니다.". "<br>";
    }

    public function getUserDetails() {
        $details = "이름: {$this->name}";
        if ($this->age !== null) {
            $details .= ", 나이: {$this->age}";
        }
        return $details. "<br>";
    }
}

$user1 = new User("Alice"); // 나이 없이 생성
echo $user1->getUserDetails();

$user2 = new User("Bob", 30); // 나이와 함께 생성
echo $user2->getUserDetails();
?>

이 예제에서는 User 클래스의 생성자가 $age를 #null을 기본값으로 하는 선택적 매개변수로 가집니다. 따라서 new User("Alice")와 같이 나이를 지정하지 않고 객체를 생성할 수 있습니다.

 


 

생성자의 오버로딩 (Overloading)

PHP 생성자의 오버로딩 (Overloading)

PHP는 다른 일부 객체 지향 언어처럼 #생성자의 오버로딩을 직접적으로 지원하지 않습니다. 즉, 동일한 이름의 생성자를 여러 개 정의할 수 없습니다. 그러나 선택적 매개변수를 활용하여 비슷한 효과를 낼 수 있습니다.

PHP
 
<?php
class Product {
    public $name;
    public $price;
    public $currency;

    public function __construct($name, $price = 0, $currency = "KRW") {
        $this->name = $name;
        $this->price = $price;
        $this->currency = $currency;
        echo "{$this->name} 상품이 {$this->price}{$this->currency} 가격으로 생성되었습니다.". "<br>";
    }
}

$product1 = new Product("Laptop"); // 이름만 지정
$product2 = new Product("Mouse", 25000); // 이름과 가격 지정
$product3 = new Product("Keyboard", 50000, "USD"); // 이름, 가격, 통화 지정
?>

위의 Product 클래스는 하나의 생성자만을 가지지만, 매개변수에 기본값을 설정하여 다양한 방식으로 객체를 초기화할 수 있도록 합니다.

 


 

상속과 생성자

PHP 상속과 생성자

 

#상속 관계에서 자식 클래스가 생성자를 정의하지 않으면, #부모 클래스의 생성자가 자동으로 호출됩니다. 그러나 자식 클래스에서 생성자를 정의하는 경우, 부모 클래스의 생성자는 자동으로 호출되지 않으므로, 필요한 경우 #parent::__construct()를 사용하여 명시적으로 호출해야 합니다.

PHP
 
<?php
class Animal {
    protected $name;

    public function __construct($name) {
        $this->name = $name;
        echo "동물 {$this->name}이(가) 생성되었습니다.". "<br>";
    }
}

class Dog extends Animal {
    public $breed;

    public function __construct($name, $breed) {
        parent::__construct($name); // 부모 클래스의 생성자 호출
        $this->breed = $breed;
        echo "강아지 {$this->name} ({$this->breed})이(가) 생성되었습니다.". "<br>";
    }
}

$dog = new Dog("Buddy", "Golden Retriever");
?>

이 예제에서 Dog 클래스는 자체 생성자를 가지고 있지만, parent::__construct($name)을 통해 부모 클래스인 Animal의 생성자를 호출하여 $name 속성을 초기화하고 있습니다. 이는 자식 클래스에서 부모 클래스의 초기화 로직을 재사용하는 좋은 방법입니다.

 


 

생성자는 PHP #OOP에서 객체를 안정적으로 초기화하고, 필요한 초기 설정을 수행하는 데 필수적인 요소입니다. 이를 통해 코드의 #가독성과 #유지보수성을 높일 수 있습니다.

 

 

무료체험, 끊김없이 빠른VPN VPN, 국내 다량IP, 모바일가능, 본사 품질관리 신뢰할 수 있는 보안성 높은 VPN 서비스

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

 

VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com