상속에서의 동등관계, 포함관계

si_yeon·2022년 1월 5일
0

Is - a 관계 : 동등관계

상속에서 자식클래스와 부모클래스는 is-a관계가 성립된다.
is-a 관계는 "a는 b이다." 관계이다.
상속의 계층구조를 올바르게 설계했는지 알기 위해 is-a 관계가 성립하는 지를 생각해보면 된다.

  • 자동차는 탈것이다 (Car is a Vehicle).
  • 강아지는 동물이다 (Dog is a animal).

코드로 예시를 들어보자면,

class Animal(object):
	pass

class Dog(Animal):
	def __init__(self, name):
    	self.name = name

위의 코드에서 클래스 Animal과 Dog 은 "개는 동물이다."의 관계가 성립한다. 둘은 동등관계이다.

Has-a 관계 : 포함관계

만약 "a는 b를 가지고 있다"와 같은 has-a(포함)관계가 성립되면 이 관계는 상속으로 모델링을 하면 안 된다.

  • 도서관은 책을 가지고 있다(Library has a book).

객체지향프로그래밍에서 이 포함관계는 구성관계(composition) 또는 집합관계(aggregation)를 의미한다.

구성관계에서는 하나의 객체가 다른 객체의 부품이 된다.
집합관계에서는 하나의 객체가 다른 객체를 소유한다.

코드로 예시를 들어보면,

class Animal(object):
	pass

class Dog(Animal):
	def __init__(self, name):
    	self.name = name
        
class Person(object):
	def __init__(self, name):
    	self.name = name
        self.pet = None
        
dog1 = Dog("dog1")
person1 = Person("아이펠")
person1.pet = dog1

위 코드에서는 Person이라는 class 가 추가되었다.
Person클래스를 보면 pet 이라는 인스턴스 변수를 비워두고,
아래에서 dog1이라는 객체를 참조하고 있다.

즉, dog1이라는 객체가 person1이라는 객체에 포함이 된다고 볼 수 있는 것이다.


_출처: 천인국, 『어서와 파이썬은 처음이지!』, 인피니티북스(2019), 527-528p._

0개의 댓글

관련 채용 정보