본문 바로가기
잡다한 코딩 노하우/Python

클래스와 상속

by lucian 2021. 12. 17.

클래스

클래스는 간단하다.

현실에 있는 사물을 추상화를 통해 프로그래밍한 것이다.

 

 

즉 현실에 사람이 있다면 사람의 전체적인 특징을 변수, 함수로 만들어 함께 넣어놓은 것이다.

클래스끼리는 상속도 가능해서 상속받은 클래스의 변수와 함수를 그대로 가져다 쓸 수 있다.

이렇게 클래스화 시키면 프로그램을 계층적으로 구성을 가능하게 한다.

또한 불필요한 소스코드 작성을 줄일 수 있다는 장점을 가지고 있다.

 

클래스에서 변수는 멤버, 함수는 그대로 함수 또는 메서드라고 불른다.

# class 선언
class Human :
	# 클래스의 생성자. 클래스라면 누구나 가지고 있는 생성자
    # 생성자는 함수형태로 이름이 __init__으로 약속되어 있다.
    # 또한 클래스 내부의 함수들은 매개변수로 self를 무조건 넣는다.
	def __init__(self, name, age):
    	self.name=name # 클래스의 멤버(변수)
        self.age=age   # 클래스의 멤버(변수)
   
   
   
   # 생성자가 있으면 소멸자도 있다.
   # del 키워드로 이 클래스가 인스턴스한 것을 제거한다.
   def __del__(self):
   		print('인스턴스를 소멸합니다~')
   
   
   
   # 보통 클래스에서 setter, getter함수들이 있다.
   # 이 set함수들은 클래스내부의 멤버들을 바꿀 때 쓴다.
   def set_name(self, name):
   		self.name=name
        
   # 이름과 나이를 print하는 함수를 만들어보자.
   def print_name_age(self):
   		print('이분의 성함은 ',name,', 나이는 ',age)

이렇게 간단하게 클래스를 선언해봤다. 이제 프로그램 상에서 이 클래스를 불러올 수 있다.

이 불러온다는 것은 인스턴스 한다는 것이다. 이는 프로그램의 메모리상에 동적으로 할당해준다는 소리이다.

human1=Human('홍길동','28')

human1.name_age_print()
# 결과
# 이분의 성함은 홍길동, 나이는 28

human1.set_name('김갑수')
print(human1.name)
# 결과
# 김갑수


del human1
# 결과
# 인스턴스를 소멸합니다~

human1.name_age_print()
# 결과
# 오류발생 - del 키워드로 인스턴스를 소멸시켰으니깐

 

 


상속

간단하게 클래스의 선언과 인스턴스에 대해 알아봤다.

상속은 더 간단하다. 방금 선언한 클래스를 상속받는다는 것은 이 Human 클래스에 있는 멤버와 함수(=메서드)들을 그대로 가져와 쓸 수 있다는 소리이다.

즉 Human 클래스는 부모 클래스가 되고, Asian이란 클래스는 자식 클래스가 된다.

Asian클래스는 Human클래스의 멤버와 함수들을 그대로 가져다 쓸 수 있다. 또한 내가 원하는 멤버나 함수를 더 추가해도 된다. 

 

또한 부모클래스에 있는 멤버나 함수들을 자식클래스에서 재정의해서 쓸 경우 자식클래스가 우선이 된다. 부모클래스에서도 자식클래스에서도 같은 이름의 멤버나 함수들이 있을 경우 부모클래스는 무시하고 자식클래스의 멤버나 함수가 더 우선이 된다는 소리이다. 이것을 사람들은 오버라이딩(Overriding)이라 불른다.

# 이처럼 상속을 할 때, 클래스 선언 절에 부모클래스의 이름을 넣는다.
class Asian(Human):
	def __init__(self, name, age, nation):
    		self.name=name
       		self.age=age
        	self.nation=nation
asian1=Asian('홍길동',28,'한국')



# 자식클래스에서 부모클래스의 함수도 쓸 수 있다.
asian1.name_age_print()
# 결과
# 이분의 성함은 홍길동, 나이는 28

 

 

 

 

이렇게 간단하게 클래스와 상속에 대해 알아봤다. 이미 알고 있었던 내용이지만 요즘들어 오버라이딩, 오버로딩 둘이 너무 헷갈려져서 다시 한번 기억하도록 써본다.

댓글