Skip to content

PHP

inheritance

Author
siwon
Date
2023-08-16 16:01
Views
854
상속(Inheritance)은 객체지향 프로그래밍(OOP)에서 사용되는 기본 개념 중 하나로, 한 클래스가 다른 클래스로부터 속성과 메서드를 물려받는 것을 의미합니다. 이는 새로운 클래스(하위 클래스 또는 파생 클래스)가 기존 클래스(상위 클래스 또는 부모 클래스)의 특성(속성과 메서드)을 얻을 수 있는 메커니즘입니다.

상속은 클래스 간의 계층적인 관계를 형성할 수 있게 해주며, 하위 클래스는 상위 클래스의 속성과 메서드를 상속받아 재사용할 수 있습니다. 이로써 코드 재사용성을 높이고, 더 구조화된 코드를 작성할 수 있습니다.

상속에 관한 주요 포인트는 다음과 같습니다:

1. **상위 클래스/부모 클래스:** 이 클래스는 상속될 클래스를 말합니다. 공통된 속성과 메서드를 정의하며, 이러한 특성들이 하위 클래스와 공유됩니다.

2. **하위 클래스/파생 클래스:** 이 클래스는 다른 클래스로부터 상속받는 클래스를 의미합니다. 부모 클래스의 기능을 확장하기 위해 새로운 속성이나 메서드를 추가할 수 있습니다.

3. **상속된 속성과 메서드:** 하위 클래스는 상위 클래스의 public과 protected 속성과 메서드를 상속받습니다. private 속성과 메서드는 하위 클래스에서 직접 접근할 수 없습니다.

4. **메서드 오버라이딩:** 하위 클래스는 부모 클래스에서 이미 정의된 메서드를 자신만의 구현으로 대체할 수 있습니다. 이를 메서드 오버라이딩이라고 합니다. 이를 통해 하위 클래스는 부모 클래스로부터 상속한 동작을 커스터마이즈하거나 확장할 수 있습니다.

다음은 PHP로 간단한 예제를 통해 설명합니다:

```php
class Animal {
    protected $name;

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

    public function speak() {
        return "Animal sound";
    }
}

class Dog extends Animal {
    public function speak() {
        return "Woof!";
    }
}

class Cat extends Animal {
    public function speak() {
        return "Meow!";
    }
}

$dog = new Dog("Buddy");
$cat = new Cat("Whiskers");

echo $dog->speak(); // 출력: "Woof!"
echo $cat->speak(); // 출력: "Meow!"
```

이 예제에서 `Dog`와 `Cat` 하위 클래스는 `Animal` 상위 클래스로부터 `name` 속성을 상속받습니다. 그리고 `speak` 메서드를 오버라이딩하여 각각의 독특한 소리를 출력하도록 변경합니다.

상속은 코드를 조직화하고 코드 재사용성을 높이며, 공통된 특성과 동작을 가진 클래스 계층을 생성하는 데 도움을 주는 강력한 개념입니다.



PHP에서 `extends` 키워드는 클래스 간의 상속 관계를 설정하는 데 사용됩니다. 이 키워드를 사용하여 하위 클래스가 상위 클래스로부터 속성과 메서드를 상속받을 수 있습니다. 다음은 이 개념을 보다 자세히 설명한 것입니다:

```php
class 부모클래스 {
    // 부모 클래스의 속성과 메서드
}

class 자식클래스 extends 부모클래스 {
    // 자식 클래스의 속성과 메서드
}
```

여기서 `자식클래스`는 `부모클래스`를 확장하여, 상위 클래스의 public과 protected 속성 및 메서드를 상속받습니다. `extends` 키워드는 하위 클래스가 상위 클래스로부터 상속받음을 나타냅니다.

더 자세한 내용을 설명하기 위해 다음 예제를 살펴보겠습니다:

```php
class 동물 {
    protected $종;

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

    public function 소리() {
        return "어떤 동물 소리";
    }
}

class 개 extends 동물 {
    public function 소리() {
        return "멍멍!";
    }
}

class 고양이 extends 동물 {
    public function 소리() {
        return "야옹!";
    }
}

$개 = new 개("개과 동물");
$고양이 = new 고양이("고양이과 동물");

echo $개->소리(); // 출력: "멍멍!"
echo $고양이->소리(); // 출력: "야옹!"
```
이 예제에서 `개`와 `고양이`는 `동물` 상위 클래스를 확장합니다. 이들 하위 클래스는 부모 클래스로부터 `종` 속성과 `소리` 메서드를 상속받습니다. 하지만 각각의 클래스는 `소리` 메서드를 오버라이딩하여 고유한 동물 소리를 제공합니다.
`extends` 키워드는 PHP에서 상속의 기본적인 부분이며, 공통된 속성과 동작을 가진 클래스 계층을 생성하는 데 도움을 줍니다.
Total 0

Total 45
Number Title Author Date Votes Views
15
http request form method GET POST
siwon | 2023.08.17 | Votes 0 | Views 1414
siwon 2023.08.17 0 1414
14
printf()
siwon | 2023.08.17 | Votes 0 | Views 1071
siwon 2023.08.17 0 1071
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 1225
siwon 2023.08.17 0 1225
9
date(), time() funtions
siwon | 2023.08.17 | Votes 0 | Views 1187
siwon 2023.08.17 0 1187
8
Superglobals
siwon | 2023.08.17 | Votes 0 | Views 813
siwon 2023.08.17 0 813
7
scalar types
siwon | 2023.08.17 | Votes 0 | Views 916
siwon 2023.08.17 0 916
6
constructor
siwon | 2023.08.16 | Votes 0 | Views 990
siwon 2023.08.16 0 990
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 1209
siwon 2023.08.29 0 1209
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