language/Python
[python] 클래스(class), 객체(object), 인스턴스(instance), 매개변수 self, 생성자(constructor), 상속(inheritance), 오버라이딩(overriding)
스파이디웹
2021. 11. 29. 10:53
728x90
1. 클래스란(class)?
- python은 객체지향을 지원하고, 함수형 프로그래밍도 가능한 언어
- class는 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀
- *객체를 정의하기 위한 상태(*멤버 변수)와 *메서드(함수)로 구성
함수와 비교했을 때, 클래스 사용의 장점
- 함수가 점차적으로 늘어 나게 된다면 무슨 역할을 하는지 의미를 파악하기 어려워지므로, 클래스를 통해 메소드를 구현하게 되면, 비슷한 역할을 하는 것을 한 곳에 모을 수 있게됨
- 재사용이 가능하다는 것이 가장 큰 장점
*객체 vs 인스턴스
- 객체란 클래스로 규정된 인스턴스, 변수 대신 실제값을 가짐
- 인스턴스란 클래스로 만든 객체
- 인스턴스는 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용
- a = Cookie() 에서 a는 객체, a객체는 Cookie의 인스턴스
*멤버 변수란
- 특정 객체와 연결된 변수의 하나, 해당 변수의 모든 메소드(멤버 함수)에 접근이 가능
- 클래스 기반 언어에서는 2종류로 구별
- 클래스 변수(정적 멤버 변수): 모든 인스턴스의 클래스와 공유되는 변수의 사본이 하나만 있는 경우
- 인스턴스 변수: 클래스의 각 인스턴스가 자신만의 변수 복사본을 소유하고 있는 경우
*메소드란
- 클래스 내에 구현된 함수
- 일반 함수와 기능적으로 다를 것이 없다.
- 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용
- 객체를 호출할 때 호출한 자신이 전달되기 때문에 self라는 관례적인 이름을 사용, (다른 이름을 사용해도 상관x)
-
#다음과 같이 클래스를 통해 메소드를 호출할 수도 있음 #하지만 클래스 이름.메소드 형태로 호출할 때는 객체 a를 첫 번째 매개변수 self에 꼭 전달해야 함 객체 = 클래스() 클래스.메소드(객체, 인수1, 인수2) #반면에 객체.메소드 형태로 호출할 때는 self를 반드시 생략해서 호출해야 함 객체 = 클래스() 객체.메소드(인수1, 인수2)
2. 생성자란(constructor)?
- 객체에 초깃값을 설정해야 할 필요가 있을 때 생성자로 구현
- 객체가 생성될 때 자동으로 호출되는 메서드
-
__init__(self, 매개변수1, 매개변수2, ...): self.매개변수1 = 매개변수1 self.매개변수2 = 매개변수2 print("객체 초기화완료")
3. 상속이란(Inheritance)?
- 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만듬
- 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용
- 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황일 때 사용
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 mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second
return result
a = MoreFourCal(4, 2)
print(a.pow())
#>> 16 출력
4. 메소드 오버라이딩(method overriding)
- 부모 클래스(상속한 클래스)에 있는 메소드를 동일한 이름으로 다른 기능으로 구현하는 것(덮어쓰기)
- 부모 클래스의 메소드 대신 오버라이딩한 메소드가 호출됨
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 mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
class SafeFourCal(FourCal):
def div(self):
if self.second == 0: # 나누는 값이 0인 경우 0을 리턴하도록 수정
return 0
else:
return self.first / self.second
a = SafeFourCal(4, 0)
print(a.div())
#>> 0출력
참조:
728x90