Wisdom’s Cloud

[PYTHON] 7. 클래스 본문

PYTHON

[PYTHON] 7. 클래스

지혜로운지혜쓰 2021. 2. 24. 10:23
클래스
  • 클래스(class)란 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면(과자 틀)이고, 객체(object)란 클래스로 만든 피조물(과자 틀을 사용해서 만든 과자)을 뜻한다.

  • 클래스로 만든 객체들은 객체마다 고유한 성격을 가진다. 과자 틀로 만든 과자에 구멍을 뚫거나 조금 베어 먹더라도 다른 과자에는 아무 영향이 없는 것과 마찬가지로 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않는다.

  • 클래스는 함수나 자료형처럼 프로그램 작성을 위해 꼭 필요한 요소는 아니지만, 프로그램을 작성할 때 클래스를 적재적소에 사용하면 프로그래머가 얻을 수 있는 이익은 상당하다.

class 클래스 이름:
   수행할 문장1
   수행할 문장2
   ···
  • 클래스 안에 구현된 함수는 다른 말로 메서드(Method)라고 부르며, 메서드도 클래스에 포함되어 있다는 점만 제외하면 일반 함수와 다를 것이 없다.

def 함수 이름(매개변수):
   수행할 문장1
   수행할 문장2
   ···

 

 

  • 사칙연산 클래스 만들기

# 클래스 구조 만들기
>>> class FourCal:
... 
# 객체에 숫자 지정할 수 있게 만들기(파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용한다. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것이며, self말고 다른 이름을 사용해도 상관없다.)
...    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
... 
>>> a = FourCal()
>>> b = FourCal()
>>> a.setdata(4, 2)
>>> b.setdata(3, 8)
>>> a.add()
6
>>> a.mul()
8
>>> a.sub()
2
>>> a.div()
2
>>> b.add()
11
>>> b.mul()
24
>>> b.sub()
-5
>>> b.div()
0.375

 

  • 생성자(Constructor)

# FourCal 클래스의 setdata 메서드를 호출하는 것과 같이 객체에 초깃값을 설정해야 할 필요가 있을 때는
# setdata 메서드를 호출하여 초깃값을 설정하기 보다는 생성자를 구현하는 것이 안전한 방법이다.
# 즉, 생성자(Constructor)란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다.
# 파이썬 메서드 이름으로 __init__를 사용하면 이 메서드는 생성자가 되며, FourCal 클래스에 생성자를 추가해 보자.
>>> class FourCal:
...    def __init__(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
... 
>>> a = FourCal(4, 2)
>>> a.add()
6
>>> a.div()
2

 

  • 클래스의 상속

# 상속(Inheritance)이란 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것이다.
# 보통 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.
# 상속 개념을 사용하여 FourCal 클래스를 상속하는 MoreFourCal 클래스를 만들어 a의 b제곱을 구할 수 있는 기능을 추가해 보자.
>>> class MoreFourCal(FourCal):
...    def pow(self):
...       result = self.first ** self.second
...       return result
... 
>>> a = MoreFourCal(4, 2)
>>> a.pow()
16

# 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것을 메서드 오버라이딩(Overriding)이라고 한다.
# 이렇게 메서드를 오버라이딩하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.
# FourCal 클래스를 상속하는 SafeFourCal 클래스를 만들어 div 메서드를 오버라이딩해 보자.
>>> class SafeFourCal(FourCal):
...    def div(self):
...       if self.second == 0:
...          return 0
...       else:
...          return self.first / self.second
... 
>>> a = SafeFourCal(4, 0)
>>> a.div()
0

 

  • 클래스 변수

# 클래스 변수는 클래스 안에 함수를 선언하는 것과 마찬가지로 클래스 안에 변수를 선언하여 생성한다.
>>> class Family:
...    lastname = "김"
... 
>>> a = Family()
>>> b = Fmaily()
>>> print(a.lastname)
김
>>> print(b.lastname)
김
>>> Family.lastname = "박"
>>> print(a.lastname)
박
>>> print(b.lastname)
박
# 클래스 변수 값을 변경했더니 클래스로 만든 객체의 lastname 값도 모두 변경된다는 것을 확인할 수 있다.
# 즉, 클래스 변수는 클래스로 만든 모든 객체에 공유된다는 특징이 있다.

'PYTHON' 카테고리의 다른 글

[PYTHON] 9. 패키지  (0) 2021.02.24
[PYTHON] 8. 모듈  (0) 2021.02.24
[PYTHON] 6. 파일 읽고 쓰기  (0) 2021.02.16
[PYTHON] 5. 사용자 입력과 출력  (0) 2021.02.16
[PYTHON] 4. 함수  (0) 2021.02.16