(python) Class에 대한 이해

파이썬 클래스


1. Class는 왜 필요한가?

result = 0

def add(num):
    global result
    result += num
    return result

print(add(3))
print(add(4))

add라는 함수에 넣은 숫자를 모두 더해준다. 3을 넣으면 이를 기억했다가 후에 넣은 4와 더해준다. 결과는 다음과 같다.

3
7

만약 이런 계산기가 2개 필요하다면?

result1 = 0
result2 = 0

def add1(num):
    global result1
    result1 += num
    return result1

def add2(num):
    global result2
    result2 += num
    return result2

print(add1(3))
print(add1(4))
print(add2(3))
print(add2(7))

result1과 result2에 대한 2개의 계산기를 만들어야 한다. 두 계산기, add1과 add2는 서로 영향을 미치지 않으므로 결과는 다음과 같다.

3
7
3
10

근데 만약 계산기가 엄청 많이 필요하다면?

result1 = 0
result2 = 0
.
.
.
resultN = 0

def add1(num):
    global result1
    result1 += num
    return result1

def add2(num):
    global result2
    result2 += num
    return result2
.
.
.
def addN(num):
    global resultN
    resultN += num
    return resultN

위와 같이 엄청 많은 함수를 다 다르게 정의해야 한다. 이를 효율적으로 해결하기 위해 Class를 사용한다.

class Calculator:   #class명은 Calculator
    def __init__(self):   #초기화를 위한 함수(이 경우 함수를 '메소드'라고도 함)
        self.result = 0

    def add(self, num):   #result는 add함수를 이용해서 구하는데
        self.result += num  #이렇게 계산하고
        return self.result  #출력하는 것이 add함수

cal1 = Calculator()   #cal1은 Calculator 클래스로 만든 하나의 계산기(객체)
cal2 = Calculator()   #cal2도 Calculator 클래스

print(cal1.add(3))    #Calcuator 클래스의 add함수를 사용한다.
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))

클래스 사용의 이점

  • 몇 번이고 재사용할 수 있다.
  • 코드 수정이 최소화된다.
  • 함수 실행 중에, 함수 자신을 다시 호출할 수 있다.

2. __init__과 self

class some_class:
  def __init__(self,something):
    self.something = something
    
  def __init__(self,something):
    print(self.something)
    
  def __init__(self,something):
    return self.something

__init__construct 라고 불리는데 초기화를 위한 함수이다. 인스턴스화를 실시할 떄 반드시 처음에 호출되는 특수한 함수로 인스턴스(오브젝트)생성시 데이터를 초기화 시켜준다.
self인스턴스 자신을 의미하는데 init()의 첫 번째 인수는 반드시 self여야한다.

class MyStatus:
  def __init__(self,age,name,height,weight): 
    self.age = age
    self.name = name
    self.height = height
    self.weight = weight
    
  def print_name(self):
    print(self.name)
    
  def print_age(self):
    print(self.age)
    
  def print_height(self):
    print(self.height)
    
  def print_weight(self):
    print(self.weight)

a=MyStatus(27,"DY",161,48)
a.print_age()
a.print_name()
a.print_height()
a.print_weight()
27
dy
161
48

3. 예제: 사칙연산 계산기 만들기

class Calculator:
  def __init__(self, num1, num2): #초기화 메서드
    self.num1 = num1
    self.num2 = num2
    
  def setdata(self,num1,num2):  #num1,num2 변수를 각각 self.num1과 self.num2에 저장
    self.num1 = num1
    self.num2 = num2
    
  def add(self):
    result = self.num1 + self.num2
    return result
    
  def sub(self):
    result = self.num1 - self.num2
    return result
    
  def div(self):
    result = self.num1 / self.num2
    return result
    
  def mul(self):
    result = self.num1 * self.num2
    return result
    
a= Calculator(5,2)

print(a.num1)
>>5
print(a.num2)
>>2
print(a.add())
>>7
print(a.sub())
>>3
print(a.div())
>>2.5
print(a.mul())
>>10