Skip to content

PHP

composition vs inheritance

Author
siwon
Date
2023-08-16 18:01
Views
1193

Composition(합성)과 Inheritance(상속)은 객체지향 프로그래밍(OOP)에서 두 가지 서로 다른 클래스 간의 관계를 설명하는 개념입니다. 각각의 개념은 클래스 간의 관계를 구성하는 방식이 다르며, 상황에 따라 적절한 방법을 선택해야 합니다.


**Composition (합성):**

- 합성은 클래스 간의 관계를 설명할 때, 한 클래스가 다른 클래스를 포함하는 형태를 나타냅니다.

- "has-a" 관계라고도 합니다. 예를 들어, "사람은 하나의 머리를 가지고 있다"라는 관계에서 "머리"는 "사람"의 일부분입니다.

- 복잡한 객체를 간단한 객체로 조합하거나, 더 작은 기능 단위의 클래스를 조합하여 보다 복잡한 기능을 구현할 때 사용됩니다.

- 코드 재사용성을 높이고 클래스 간의 결합도를 낮출 수 있습니다.

- 변경이 용이하며 유지 보수가 간편합니다.


**Inheritance (상속):**

- 상속은 클래스 간의 관계를 설명할 때, 부모 클래스(상위 클래스)의 특성과 동작을 자식 클래스(하위 클래스)가 물려받는 형태를 나타냅니다.

- "is-a" 관계라고도 합니다. 예를 들어, "직사각형은 도형이다"라는 관계에서 "직사각형"은 "도형"이며, "도형"의 특성과 동작을 상속합니다.

- 코드 중복을 줄이고, 공통된 기능을 부모 클래스에서 정의하여 하위 클래스에서 확장하거나 수정할 수 있습니다.

- 상속 체인이 복잡해질 수 있고, 변경이 상위 클래스에서 하위 클래스까지 전파될 수 있어 유의해야 합니다.

PHP를 사용한 Composition(합성)과 Inheritance(상속)의 비교를 살펴보겠습니다.


**Composition (합성) 예시:**

```php

class Engine {

    public function start() {

        echo "Engine started\n";

    }

}


class Car {

    private $engine;


    public function __construct() {

        $this->engine = new Engine();

    }


    public function start() {

        echo "Car is starting\n";

        $this->engine->start();

    }

}


$myCar = new Car();

$myCar->start(); // 출력: "Car is starting", "Engine started"

```


**Inheritance (상속) 예시:**

```php

class Animal {

    public function speak() {

        // Placeholder

    }

}


class Dog extends Animal {

    public function speak() {

        return "Woof!";

    }

}


class Cat extends Animal {

    public function speak() {

        return "Meow!";

    }

}


$myDog = new Dog();

$myCat = new Cat();


echo $myDog->speak(); // 출력: "Woof!"

echo $myCat->speak(); // 출력: "Meow!"

```

위 예시에서, Composition은 "Car has an Engine" 관계를 나타내고, Inheritance는 "Dog is an Animal" 관계를 나타냅니다. 두 개념 모두 코드를 구성하는 방식과 관계를 표현하는 방식이 다르며, 선택은 문제에 맞게 결정되어야 합니다.

Composition은 객체 간의 느슨한 결합을 유지하고, 변경이 상대적으로 쉽고 코드의 재사용성이 높습니다. Inheritance는 부모 클래스의 특성을 하위 클래스에 물려주므로 코드 중복을 줄이고 공통된 동작을 정의하기에 편리하지만, 복잡한 상속 체인과 변경 전파에 주의해야 합니다.

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 1154
siwon 2023.08.16 0 1154
자식 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 918
siwon 2023.08.16 -1 918
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 853
siwon 2023.08.16 0 853
1
object와 class의 차이점
siwon | 2023.08.16 | Votes 0 | Views 1145
siwon 2023.08.16 0 1145