파이썬은 객체지향 언어이므로 클래스를 잘만 활용하면 여기저기 조립하듯이 편리하게 활용할 수 있다.
add
함수result = 0
def add(num):
global result
result += num
return result
print(add(3)) #출력 : 3
print(add(4)) #출력 : 7
이러한 add
함수를 이용해서 각각 여러 개의 값을 출력하고 싶을 때 클래스를 활용할 수 있다.
class Calculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
return self.result
cal1 = Calculator() # 객체
cal2 = Calculator() # 객체
print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))
3
7
3
10
cal1과 cal2가 각각 Calculator
의 클래스를 참조하여 add함수를 독립적으로 사용하고 있다.
클래스와 객체의 관계를 나타내주는 그림
쿠키를 만드는 과자 틀과 쿠키들
클래스는 무엇인가를 계속해서 만들어낼 수 있은 설계 도면이고, 객체는 클래스로 만든 결과물로 볼 수 있다.
객체마다 고유한 성격을 가지므로 객체를 변형하더라도 다른 객체에는 영향을 주지 않는다.
메소드(Method) : 클래스 안에 구현된 함수
인스턴스 : 클래스로 만든 객체
인스턴스라는 말은 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용한다.
보통 a 자체만을 설명할 때는 "a는 객체이다."
a와 클래스와의 관계를 설명할 때는 "a는 Cookie의 인스턴스이다."라고 표현한다.
생성자(Constructor)란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다.
파이썬 메소드 이름으로 __init__
를 사용하면 이 메서드는 생성자가 된다.(초기화 메소드)
def __init__(self, first, second):
self.first = first
self.second = second
이 __init__
메소드는 이름을 __init__
으로 했기 때문에 생성자로 인식되어 객체가 생성되는 시점에 자동으로 호출이 된다.
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
__init__
메소드로 생성자를 구현함으로써 초깃값을 사용할 수 있게 된다.
# 초깃값 설정
a = FourCal(4, 2)
a.first # 4
a.second # 2
# 더하기, 빼기
a.add() # 6
a.sub() # 2
드라마 상속자들이 생각나는 클래스의 상속...
상속(Inheritance)이란 "물려받다"라는 뜻으로, "재산을 상속받다"라고 할 때의 상속과 같은 의미로 클래스에도 이 개념을 적용할 수 있다.
클래스를 상속하기 위해서는 다음처럼 클래스 이름 뒤 괄호 안에 상속할 클래스 이름을 넣어주면 된다.
class 클래스 이름(상속할 클래스 이름)
class MoreFourCal(FourCal):
pass
pass
: 함수, 클래스에 내용을 작성하지 않는 빈 함수, 빈 클래스를 만들 때 사용하는 키워드
MoreFourCal 클래스는 FourCal 클래스를 상속했으므로 FourCal 클래스의 모든 기능을 사용할 수 있다.
a = MoreFourCal(4, 2)
a.add()
a.mul()
a.sub()
a.div()
보통 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.
기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면 상속을 사용해야 한다.
부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것 = 덮어쓰기
메소드 오버라이딩을 하면 부모 클래스의 메소드 대신 오버라이딩한 메소드가 호출된다.
특정 메소드만 가져와서 코드를 다르게 요리해서 활용하고 싶을 때 유용할 듯!
class SafeFourCal(FourCal):
def div(self):
if self.second == 0: # 나누는 값이 0인 경우 0을 리턴하도록 수정
return 0
else:
return self.first / self.second
객체 변수는 다른 객체들의 영향을 받지 않고 독립적으로 그 값을 유지한다.
반면 클래스 변수는 클래스로 만든 모든 객체에 값이 공유된다는 특징이 있다.
클래스이름.클래스변수
# 클래스 변수선언
class Family:
lastname = "박"
#클래스 변수 사용
Family.lastname
# 실행결과 : 박
2023.06.13 작성