-
[Python 기초 #7] 클래스, 객체와 인스턴스 차이, 생성자, 상속, 오버라이딩Programming 기초/Python 2023. 4. 21. 18:27
* 클래스(class)
- 클래스는 거푸집과 같다. 같은 기능을 하는 함수를 필요할 때마다 찍어내는 '함수 틀'이다. 클래스로 생성된 함수들을 객체(object)라고 부른다.
- c언어에는 클래스가 없다. c언어에서는 같은 기능을 하는 함수라도 매번 이름을 약간씩 바꿔가면서 새롭게 정의해야한다.
- 클래스 이름을 지을 때, 관례적으로 첫 글자를 대문자를 사용한다.
- 클래스 안에 구현된 함수는 메서드(Method)라고 부른다.
- 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용한다. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것이다.
객체와 인스턴스(instance)의 차이
클래스로 만든 객체를 인스턴스라고도 한다.
a =Cookie() 이렇게 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다. 'a는 인스턴스'보다는 'a는 객체'라는 표현이 어울리고, 'a'는 Cookie의 인스턴스'라는 표현이 훨씬 잘 어울린다.* 생성자(constructor)
객체에 초깃값을 설정할 때, setdata 메서드를 호출하여 초깃값을 설정하기보다는 생성자를 구현하는 것이 안전하다.
class FourCal: def __init__(self, first, second): # 생성자 메서드의 이름에 '_'는 각 양쪽에 두 개씩 붙는다. self.first = first self.second = second def setdata(self, first, second): self.first = first self.second = second def add(self): result = self.first + self.second return result def sub(self): result = self.first - self.second return result def mul(self): result = self.first * self.second return result def div(self): result = self.first / self.second return result a = FourCal(4, 2) b = FourCal(3, 8) print(a.add()) print(b.add()) print(a.div()) print(b.div()) ------------------------------------------------- 6 11 2.0 0.375
* 클래스의 상속(Inheritance)
어떤 클래스를 만들 때 다른 클래스의 기능을 물려받는 것. 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.
class 클래스 이름(상속할 클래스 이름)
class MoreFourCal(FourCal): #기존 사칙연산 클래스에 지수계산 메서드를 추가했다. def pow(self): result = self.first ** self.second return result c = MoreFourCal(4, 3) print(c.pow()) -------------------------------------- 64
* 메서드 오버라이딩(Overriding, 덮어쓰기)
부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것을 메서드 오버라이딩이라고 한다.
class FailFourCal(FourCal): # 곱하는 값이 0일 경우 'Fail' 문자열을 출력하는 클래스 def mul(self): if self.second == 0: return 'Fail' else: return self.first * self.second d = FailFourCal(5, 0) print(d.mul()) ------------------------------------- Fail
* 클래스 변수
- 객체변수는 다른 객체들에 영향받지 않고 독립적으로 그 값을 유지한다.
- 클래스 변수는 클래스로 만든 모든 객체에 공유된다(클래스 변수 값을 변경하면 클래스로 만든 모든 객체의 해당 변수값이 모두 변경된다).
class Family: lastname = "김" # 클래스 변수 lastname을 "김" 문자열로 초기화시킴 print(Family.lastname) a = Family() b = Family() print(a.lastname) print(b.lastname) Family.lastname = "박" print(a.lastname) print(b.lastname) ------------------------------------- 김 김 김 박 박
id값을 확인하면 Fanily.lastname, a.lastname, b.lastname은 모두 같은 메모리를 가리키고 있다.
print(id(Family.lastname)) print(id(a.lastname)) print(id(b.lastname)) ------------------------------- 2002133181472 2002133181472 2002133181472
'Programming 기초 > Python' 카테고리의 다른 글
[Python 기초 #9] 패키지 (0) 2023.04.27 [Python 기초 #8] 모듈 (0) 2023.04.25 [Python 기초 #6] 함수, 사용자 입력과 출력, 파일 읽고 쓰기 (0) 2023.04.19 [Python 기초 #5] 제어문 if, while, for (0) 2023.04.18 [Python 기초 #4] 집합(set), 불(bool), 변수(variable) (0) 2023.04.15