Python Class 와 Instance 기초문법 및 구현해보기
이전 포스팅에서 클래스와 인스턴스에 대해서 알아보았습니다. 이번 포스팅에서는 클래스와 인스턴스 기초 문법에 대해 이야기해보겠습니다.
이번에는 숫자로 간단한 연산을 할 수 있는 계산기를 클래스로 구현해 보겠습니다. 데이터는 숫자이고 메소드(함수) 는 연산기능이라 할 수 있습니다.
한 가지 도움되는 팁을 드리자면, 다루는 데이터가 어떤 데이터인지, 그 데이터로 어떤 작업을 해야할 것인지 정리 후 코드를 짤지 생각을 한다면 클래스를 다룰 때 좀 더 쉽게 이해를 할 수 있을 것입니다.
1. 클래스 설계하기
코드를 짜기 전 이 코드가 어떤 목적으로 하는지, 어떻게 동작을 하는지 정해놓는지 확실하게 정해놓는것이 필수입니다.
계산기 클래스를 쓸 것이므로, 어떤 데이터를 다룰 것인지, 어떤 작업을 할 것인지 정해둡시다.
1.1 어떤 데이터를 다루는가?
보통 계산기는 정수 및 유리수를 사용하므로 간단하게 유리수를 다룬다고 정하겠습니다.
- 데이터 : float 형
1.2 어떤 작업을 할 것인가?
간단하게 덧셈, 곱셈, 뺄셈, 나눗셈, 계산이력을 출력하는 기능 5개를 구현해보겠습니다. 따라서 구현할 메소드는 다음과 같습니다.
- 메소드1: 덧셈(add) - 기존 데이터에 새로운 숫자를 더함
- 메소드2: 곱셈(mult) - 기존 데이터에 새로운 숫자를 곱함
- 메소드3: 뺼셈(sub) - 기존 데이터에 새로운 숫자를 뺌
- 메소드4: 나눗셈(div) - 기존 데이터에 새로운 숫자를 나눔
- 메소드5: 계산이력(record) - 이제까지 계산한 기록을 문자열로 반환(return)
2. 클래스 및 인스턴스 선언하기
클래스를 선언하는 방법은 다음과 같습니다.
# 계산기 클래스 선언
class Calculator(object):
pass
# 괄호 내 object 생략 가능
class Calculator():
pass
# 괄호 생략 가능
class Calculator:
pass
인스턴스는 다음과 같이 생성할 수 있습니다. 인스턴스를 생성한다는 것은, 클래스에서 정한 방법대로 데이터를 관리하는 객체를 만든다는 것 입니다.
cal1 = Calculator()
cal2 = Calculator()
...
변수를 정의할때 클래스를 호출하는 것으로 쉽게 여러개의 인스턴스를 만들 수 있습니다.
3. 내부 변수 정의하기
변수와 함수를 한데 묶어서 관리하므로, 당연히 내부에서 사용되는 변수를 정의할 수 있습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, record'
내부 변수를 정의하면, 해당 클래스로 만들어진 인스턴스는 변수 값을 그대로 포함합니다.
cal1 = Calculator()
print(cal1.name)
-> Simple Calculator
4. 메소드 정의하기
변수와 함수를 한번에 묶어서 관리하기 때문에, 클래스는 선언 시 변수와 함수도 한번에 선언합니다. 이 때, 클래스 내부에서 사용되는 함수는 메소드(Method) 라는 이름을 가집니다.
메소드는 클래스 내부에서 다음과 같이 정의할 수 있습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, record'
# 메소드(method) 정의
def method_example(self):
print("method example")
return None
간단하게 method_example 이라는 메소드를 정의했습니다. 이 메소드는 실행 시 'method example' 이라는 문자열을 출력하고, None 값을 return 합니다.
인스턴스 생성 후, 클래스 내부 함수인 메소드는 다음과 같이 실행합니다.
cal1 = Calculator()
# 인스턴스 생성 후 메소드 실행
cal1.method_example()
-> method example 출력
5. 초기화 메소드와 인스턴스 속성 정의
클래스는 처음 정의 후 실행 시 초기화 메소드가 실행됩니다. 이 때 인스턴스가 어떤 변수들을 가지는지 정할 수 있으며, 이를 인스턴스 속성 또는 어트리뷰트(attribute) 라고 합니다.
초기화 함수를 정의해 보겠습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, record'
# 초기화 메소드 __init__ 정의
def __init__(self):
pass
'__init__' 을 통해 초기화 함수를 정의할 수 있습니다.
초기화 메소드를 정의 할 시 self 옆에 필요 변수를 선언하고, 아래 'self.~' 으로 인스턴스 속성을 정의할 수 있습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, record'
# 초기화 메소드 __init__ 정의 및 인스턴스 속성 self.number 정의
def __init__(self, number):
self.number = number
인스턴스 선언시 변수 number 를 self.number 로 처음 인스턴스 속성을 선언해 놓으면, 이후 필요한 메소드에도 공유되어 self.number 를 활용할 수 있습니다.
초기화 함수 정의 시 필요 변수의 기본 값을 정해놓을 수도 있습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, record'
# 초기화 메소드 __init__ 정의 및 인스턴스 속성 self.number 정의(기본값=0)
def __init__(self, number=0):
self.number = number
인스턴스 선언 시 다음과 같이 인스턴스 속성을 정의할 수 있습니다.
# 인스턴스 선언시 number=8 로 정의함
cal1 = Calculator(number=8)
print(cal1.number)
-> 8
6. 연산 메소드 구현하기
이제 차례대로 덧셈, 곱셈, 뺄셈, 나눗셈 메소드를 구현해 봅시다. 처음 입력된 숫자인 number 가 인스턴스 속성으로 공유되니, 이를 활용해하면 될 것 같습니다.
예를 들어, 덧셈의 경우 기존에 인스턴스에 있던 숫자와 새로운 숫자를 더하는 연산이므로, self.number + 새로운 숫자로 구현하면 될 것 같습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, record'
# 초기화 메소드 __init__ 정의 및 인스턴스 속성 self.number 정의
def __init__(self, number=0):
self.number = number
# 덧셈 메소드
def add(self, new_number):
self.number += new_number
add 함수의 목적은 기존에 존재하는 인스턴스 속성인 self.number 를 조작하는 것이어서, 위와 같이 return 을 생략하였습니다.
인스턴스 선언 후 add 메소드를 사용해보겠습니다.
cal1 = Calculator(number=8)
# 메소드 add 사용
cal1.add(new_number=2)
print(cal1.number)
-> 10
나머지 연산도 마찬가지로 구현해 보겠습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, record'
# 초기화 메소드 __init__ 정의 및 인스턴스 속성 self.number 정의
def __init__(self, number=0):
self.number = number
# 덧셈 메소드
def add(self, new_number):
self.number += new_number
# 곱셈 메소드
def mult(self, new_number):
self.number *= new_number
# 뺄셈 메소드
def sub(self, new_number):
self.number -= new_number
# 나눗셈 메소드
def div(self, new_number):
self.number /= new_number
7. 계산이력 메소드 구현 및 기존 코드 수정
이제 계산 이력이 모인 메소드를 구현해 보겠습니다. 아마도 이전에 활용했던 인스턴스 속성을 활용하면 될 것 같습니다.
저는 문자열을 계속 더하는 식으로 인스턴스 속성을 구현해 보겠습니다. 그리고 인스턴스 속성을 return 하는 메소드를 만들겠습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, print_record'
def __init__(self, number=0):
self.number = number
# 문자열 인스턴스 속성 self.recode 정의
self.recode = str(number)
def add(self, new_number):
self.number += new_number
def mult(self, new_number):
self.number *= new_number
def sub(self, new_number):
self.number -= new_number
def div(self, new_number):
self.number /= new_number
# 계산 이력 인스턴스 속성인 self.recode 를 return
def return_recode(self):
return self.recode
계산이력을 위한 인스턴스 속성 self.recode 를 정의했으니, 나머지 연산 메소드에 self.recode 를 이용하여 연산 기록을 하면 될 것 같습니다. 간단하게 문자열 덧셈을 활용하여 구현해보겠습니다.
추가적으로, return_recode 메소드도 현재 self.number 를 포함해서 문자열을 return 하게 수정했습니다.
class Calculator(object):
name = 'Simple Calculator'
funtion = 'add, mult, sub, div, print_record'
def __init__(self, number=0):
self.number = number
self.recode = str(number)
def add(self, new_number):
self.number += new_number
self.recode += f' +{new_number}'
def mult(self, new_number):
self.number *= new_number
self.recode += f' *{new_number}'
def sub(self, new_number):
self.number -= new_number
self.recode += f' -{new_number}'
def div(self, new_number):
self.number /= new_number
self.recode += f' /{new_number}'
# 계산 이력 및 현재 number 문자열 return
def return_recode(self):
return f'{self.recode} = {self.number}'
인스턴스 선언 후 메소드들을 사용해보면 다음과 같습니다.
cal1 = Calculator(3)
cal1.add(6)
cal1.sub(1)
cal1.mult(2)
cal1.div(4)
num_string = cal1.return_recode()
print(num_string)
-> 3 +6 -1 *2 /4 = 4.0
이렇게 클래스와 인스턴스의 기초 문법에 대해 알아보고 이를 활용하여 어떻게 클래스와 인스턴스를 정의하는지, 인스턴스 속성과 메소드를 어떻게 활용하는지 다루었습니다. 이번 포스팅으로 조금이나마 도움이 되었으면 합니다.
'Python' 카테고리의 다른 글
| python ~ indexing (0) | 2023.07.18 |
|---|---|
| Class 와 Instance (0) | 2023.07.12 |



