프로그래밍을 한층 더 견고하고 멋지게 할 수 있게 해주는 클래스 class
기본 구조는 이렇다.
class 클래스이름:
def 메서드이름(매개변수1, 매개변수2, ....)
(함수와 메서드는 같은 용어이다. 하지만 클래스 안의 함수는 메서드라고 부르기로 약속되어 있다.)
위 모양만 봐서 class가 어떤 기능을 하는지 모르겠다.
깊이 이해하려고 할 필요없이 이렇게 생각하면 된다.
우리 주변의 많은 물건들은 모두 공장에서 생산되어 나오지 않는가?
class는 공장. 프로그래밍할 때 코드 속에 위치하고 있는 작은 공장이라고 생각하면 된다.
예를 들어 자동차를 만든다고 생각하고 있어 보자. 이때 자동차는 완성품인 결과물(프로그램)
[재료] -> [공장] -> [완성품]
어쩌면 여러 공장이 필요할 수도 있다.
[재료] -> [공장1] -> [부품1] -> [공장2] -> [부품2] -> [조립] -> [완성품]
그리고 한 공장에서 여러가지 부품을 만들수도 있겠지
[재료] -> [공장1] -> [부품1,부품3] -> [공장2] -> [부품2,부품4] -> [조립] -> [완성품]
공장 안에 있는 많은 기계들을 가지고 자동차의 어떤 부품을 만들까? 자동차의 창문, 휠, 엔진 등등..
이때 필요한 부품을 한 공장에서 만들 수 있게 공정을 짜 놓고 거기에 이름을 붙인 것이
메서드라고 할 수 있다.
하지만 이것은 자동차의 이야기이고 프로그래밍 안에서 작은 공장은 어떻게 만들어질까
계산기를 만들 수 있는 공장을 만들어보자.
먼저 무엇을 생산하는 공장이며, 공장 이름은 무엇으로 하지?
class Calculator:
계산기의 디자인은 어떻게 생겼고 어떤 재료를 받아 만들까?
일단 숫자 두개만 받아 오자.
class Calculator:
def setdata(self,firstnum,secondnum): # firstnum과 secondnum 두 수를 받아온다.
self.firstnum = firstnum
self.secondnum = secondnum
여기서 첫번째 매개변수인 self는 자동으로 객체(Object)에게 할당된다. (밑에서 후술)
물론 매개변수의 이름은 self가 아니여도 상관없지만 이것도 파이썬에서 무언의 약속으로 정해져 있다.
계산기를 만드는 공장에 필요한 공정(메서드)은 뭐가 있을까?
덧셈, 뺄셈, 나눗셈, 곱셈
class Calculator: # 계산기 공장
def setdata(self,firstnum,secondnum): # 계산기 디자인(두 수를 입력 받음)
self.firstnum = firstnum
self.secondnum = secondnum
def add(self): # 덧셈 공정
result = self.firstnum + self.secondnum
return result
def sub(self): # 뺄셈 공정
result = self.firstnum - self.secondnum
return result
def div(self): # 나눗셈 공정
result = self.firstnum / self.secondnum
return result
def mul(self): # 곱셈 공정
result = self.firstnum * self.secondnum
return result
두 가지 숫자를 가지고 사칙연산을 할 수 있는 작은 공장이 만들어졌다.
이제 공장을 사용할 수 있는 사람(객체)는 누가있는지 정해준다.
공장은 재료가들어가 무언가를 찍어내는 행위를 동시, 반복적으로 할 수 있기에
여러사람이 같은 공장에서 여러 다른종류의 부품을 동시에 만들(사용 할) 수도 있다.
class Calculator: # 계산기 공장
def setdata(self,firstnum,secondnum): # 계산기 디자인(두 수를 입력 받음)
self.firstnum = firstnum
self.secondnum = secondnum
def add(self): # 덧셈 공정
result = self.firstnum + self.secondnum
return result
def sub(self): # 뺄셈 공정
result = self.firstnum - self.secondnum
return result
def div(self): # 나눗셈 공정
result = self.firstnum / self.secondnum
return result
def mul(self): # 곱셈 공정
result = self.firstnum * self.secondnum
return result
# 객체 지정
a = Calculator()
b = Calculator()
c = Calculator()
d = Calculator()
여기에 있는 객체들이 공장안에서 self를 자동으로 할당받는 인자들이다.
그렇기에 명령을 할때도 항상 누가(어떤 객체가) 무엇을 할지 지시한다.
이제 누가 어떤 재료를 넣을건지 정해주자.
class Calculator: # 계산기 공장
def setdata(self,firstnum,secondnum): # 계산기 디자인(두 수를 입력 받음)
self.firstnum = firstnum
self.secondnum = secondnum
def add(self): # 덧셈 공정
result = self.firstnum + self.secondnum
return result
def sub(self): # 뺄셈 공정
result = self.firstnum - self.secondnum
return result
def div(self): # 나눗셈 공정
result = self.firstnum / self.secondnum
return result
def mul(self): # 곱셈 공정
result = self.firstnum * self.secondnum
return result
# 객체 지정
a = Calculator()
b = Calculator()
c = Calculator()
d = Calculator()
a.setdata(1, 2)
b.setdata(3, 4)
a는 1, 2
b는 3, 4 를 공장에 보냈다.
드디어 생산을 시작하고 만들어진 부품을 보여달라고 할 수 있다.
class Calculator: # 계산기 공장
def setdata(self,firstnum,secondnum): # 계산기 디자인(두 수를 입력 받음)
self.firstnum = firstnum
self.secondnum = secondnum
def add(self): # 덧셈 공정
result = self.firstnum + self.secondnum
return result
def sub(self): # 뺄셈 공정
result = self.firstnum - self.secondnum
return result
def div(self): # 나눗셈 공정
result = self.firstnum / self.secondnum
return result
def mul(self): # 곱셈 공정
result = self.firstnum * self.secondnum
return result
# 객체 지정
a = Calculator()
b = Calculator()
a.setdata(1, 2)
b.setdata(3, 4)
# 출력
print("%d, %d, %.1f, %d \n" %(a.add(),a.sub(),a.div(),a.mul())) # 문자열로 출력
print(b.add())
print(b.sub())
print(b.div())
print(b.mul(), "\n")
a는 Calculator의 공장사람이라고 객체로 지정해주었다.
a가 무슨 재료를 가지고 있을지도 지정해주었다.
이젠 a가 어떤 공정을 탈지도 지정해주면 된다. a.add(), a.div()
결과
3, -1, 0.5, 2
7
-1
0.75
12
1과 2에 대한 사칙연산이, 3과 4에 대한 사칙연산이 올바르게 출력되어 나오는것을 볼 수 있다.
이렇게 지금까지 해 왔던 일회성 프로그램들과 다르게 클래스와 메서드를 사용하여 작은 공장을 만들어 놓으면
실제 프로그램 제작에서는 값을 주는 것이 입력값을 받아오는게 될 수 도 있지만
변수와 입력에 관한 필요없는 코드를 난잡하게 쓸 필요가 없어지고 한 사람이 여러 공정(메서드)를 방문하는 일도 가능하게 되는것이다.
'IT > 파이썬3 공부' 카테고리의 다른 글
[백준 온라인] 파이썬 연습문제 2884번 알람시계 풀이 (0) | 2020.06.11 |
---|---|
텐서플로우 tensorflow 2.2.0 설치법과 오류 해결법 (0) | 2020.05.28 |
[파이썬 기초] 함수선언 def 예약어의 사용법 (0) | 2020.05.19 |
[파이썬 기초] for 반복문 기초 (0) | 2020.05.15 |
[파이썬 기초] while 반복문 기초 (0) | 2020.05.13 |
최근댓글