본문 바로가기
Programming/Python

[클래스] 상속 관계와 포함 관계

by 용스토리랜드 2023. 3. 13.

# 상속 관계 

- Student 클래스는 Person 클래스를 상속받아서 만들었다. 

class Person : 
  def greeting(self) : 
   print("안녕하세요")
   
class Student(Person) : 
  def study(self) : 
    print("공부하기")

여기서 학생 Student 는 사람 Person 이므로 같은 종류입니다. 이처럼 상속은 명확하게 같은 종류이며 동등한 관계일 때 사용합니다. 즉, "학생은 사람이다." 라고 했을 때 말이 되면 동등한 관계입니다. 그래서 상속 관계를 영어로 is-a 관계라고 부릅니다. (Student is a Person)

 

# 포함관계

학생 클래스가 아니라 사람 목록을 관리하는 클래스를 만든다면 ?

리스트 속성에 Person 인스턴스를 넣어서 관리하면 된다.

 

class Person : 
  def greeting(self) :
    print("안녕하세요")

class PersonList : 
  def __init__(self) :
    self.person_list = [] # 리스트 속성에 Person 인스턴스를 넣어서 관리
    
  def append_person(self, person) : # 리스트 속성에 Person 인스턴스를 추가하는 함수
    self.person_list.append(person)
    
sara = Person()
person_list = PersonList()

person_list.append_person(sara)

print(person_list.person_list)

>>> [sara]

 

상속을 사용하지 않고 속성에 인스턴스를 넣어서 관리하므로 PersonList 가 Person 을 포함하고 있다. 이러면 사람 목록 PersonList 와 사람 Person 은 동등한 관계가 아니라 포함 관계입니다. 즉, "사람 목록은 사람을 가지고 있다." 라고 말할 수 있습니다. 그래서 포함 관계를 영어로 has-a 관계라고 부른다. (PersonList has a Person)

 

정리하자면, 같은 종류에 동등한 관계일 때는 상속을 사용하고, 그 이외에는 속성에 인스턴스를 넣는 방식을 사용하면 된다.

반응형