Skip to content

PHP

constructor

Author
siwon
Date
2023-08-16 19:27
Views
991

생성자(Constructor)는 객체지향 프로그래밍에서 클래스를 기반으로 객체(인스턴스)를 생성할 때 자동으로 호출되는 특별한 메서드를 의미합니다. 생성자는 객체의 초기화 작업을 수행하고, 객체의 속성을 설정하거나 필요한 설정을 수행하는 역할을 합니다. 생성자 메서드는 주로 객체가 생성될 때 딱 한 번 호출되며, 객체의 상태를 초기화하는 데 사용됩니다.


생성자 메서드는 다양한 프로그래밍 언어에서 다른 이름을 가질 수 있지만, 일반적으로 생성자라는 용어가 많이 사용됩니다. 대표적인 언어에서의 생성자 표기 예시:


- **Java:** 생성자는 클래스 이름과 동일하며, `new` 키워드를 사용하여 호출됩니다.

- **C#:** 생성자는 클래스 이름과 동일하며, `new` 키워드를 사용하여 호출됩니다.

- **Python:** 생성자는 `__init__` 메서드로, 객체 생성 시 자동으로 호출됩니다.

- **PHP:** 생성자는 `__construct` 메서드로, 객체 생성 시 자동으로 호출됩니다.

- **C++:** 생성자는 클래스 이름과 동일하며, 객체 생성 시 호출되지만 함수와 같은 형태를 가집니다.

생성자를 사용하면 객체를 초기화하고 필요한 설정을 수행함으로써 객체의 사용을 더 편리하게 만들 수 있습니다. 생성자는 객체의 상태를 초기화하는 데 중요한 역할을 하며, 객체가 생성될 때 바로 실행되므로 객체의 유효한 상태를 보장할 수 있습니다.




class MyClass {

    public function __construct() {

        // Constructor code here

    }

}

class Person {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

$person = new Person("John");
echo $person->getName(); // Output: "John"




**설명:**
객체 지향 프로그래밍에서 상속을 사용하여 부모 클래스를 확장한 자식 클래스를 생성할 때, 부모 클래스와 자식 클래스 간의 생성자(constructor) 동작을 알아보겠습니다. 이 과정은 주로 Java, C# 및 PHP와 같은 언어에서 `extends` 키워드를 사용하여 하위 클래스를 생성할 때 생성자가 어떻게 동작하는지를 설명합니다:

**1. 부모 클래스의 생성자 (Parent Class Constructor):**
   - 자식 클래스의 객체가 생성되면 자동으로 부모 클래스의 생성자가 호출됩니다.
   - 부모 클래스에 생성자가 있으면, 자식 클래스의 생성자에서 `parent::__construct()` 구문을 사용하여 부모 클래스의 생성자를 명시적으로 호출할 수 있습니다. 이를 통해 부모 클래스와 관련된 초기화 작업을 수행할 수 있습니다.

**2. 자식 클래스의 생성자 (Child Class Constructor):**
   - 자식 클래스의 생성자에서 `parent::__construct()` 구문을 사용하여 부모 클래스의 생성자를 호출하여 부모 클래스로부터 상속된 속성을 초기화할 수 있습니다.
   - 또한 자식 클래스의 생성자에서 추가적인 속성을 정의하거나 부모 클래스로부터 상속된 속성 및 메서드를 오버라이드할 수 있습니다.

**예제 코드:**
아래는 PHP로 작성된 예제 코드입니다:

```php
class Animal {
    protected $species;

    public function __construct($species) {
        $this->species = $species;
        echo "Animal constructor called\n";
    }

    public function getInfo() {
        return "Species: " . $this->species;
    }
}

class Dog extends Animal {
    private $breed;

    public function __construct($species, $breed) {
        parent::__construct($species); // Call parent constructor
        $this->breed = $breed;
        echo "Dog constructor called\n";
    }

    public function getInfo() {
        return parent::getInfo() . ", Breed: " . $this->breed;
    }
}
$dog = new Dog("Canine", "Labrador");
echo $dog->getInfo(); // 출력: "Species: Canine, Breed: Labrador"
```
이 예제에서 `Animal` 클래스에는 종(species)을 초기화하는 생성자가 있습니다. `Dog` 클래스는 `Animal` 클래스를 확장하며, 자식 클래스의 생성자에서 상속된 속성과 새로운 속성을 초기화합니다. `parent::__construct()` 구문을 사용하여 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출합니다.
생성자 연쇄 및 상속의 동작은 사용하는 프로그래밍 언어에 따라 달라질 수 있으며, 구체적인 구문은 언어별로 조금씩 다를 수 있습니다.

Total 0

Total 45
Number Title Author Date Votes Views
15
http request form method GET POST
siwon | 2023.08.17 | Votes 0 | Views 1415
siwon 2023.08.17 0 1415
14
printf()
siwon | 2023.08.17 | Votes 0 | Views 1072
siwon 2023.08.17 0 1072
13
heredoc 또는 nowdoc 구문
siwon | 2023.08.17 | Votes 0 | Views 1069
siwon 2023.08.17 0 1069
12
single vs double quotes
siwon | 2023.08.17 | Votes 0 | Views 904
siwon 2023.08.17 0 904
11
string functions
siwon | 2023.08.17 | Votes 0 | Views 1050
siwon 2023.08.17 0 1050
10
return types
siwon | 2023.08.17 | Votes 0 | Views 1226
siwon 2023.08.17 0 1226
9
date(), time() funtions
siwon | 2023.08.17 | Votes 0 | Views 1188
siwon 2023.08.17 0 1188
8
Superglobals
siwon | 2023.08.17 | Votes 0 | Views 815
siwon 2023.08.17 0 815
7
scalar types
siwon | 2023.08.17 | Votes 0 | Views 917
siwon 2023.08.17 0 917
6
constructor
siwon | 2023.08.16 | Votes 0 | Views 991
siwon 2023.08.16 0 991
5
composition vs inheritance
siwon | 2023.08.16 | Votes -1 | Views 1193
siwon 2023.08.16 -1 1193
4
polymorphism = method overriding => abstract(추상화)와 관련있음
siwon | 2023.08.16 | Votes 0 | Views 1155
siwon 2023.08.16 0 1155
자식 class가 부모와 같은 method를 가질경우 자식 class의 메소드가 우선한다는 원칙
siwon | 2023.08.29 | Votes 0 | Views 1210
siwon 2023.08.29 0 1210
3
encapsulation
siwon | 2023.08.16 | Votes -1 | Views 919
siwon 2023.08.16 -1 919
private, protected등 access modifier를 사용하여 property나 method의 접근을 제한 하는 oop 원칙
siwon | 2023.08.30 | Votes 0 | Views 1072
siwon 2023.08.30 0 1072
2
inheritance
siwon | 2023.08.16 | Votes 0 | Views 854
siwon 2023.08.16 0 854
1
object와 class의 차이점
siwon | 2023.08.16 | Votes 0 | Views 1145
siwon 2023.08.16 0 1145