일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 기울기
- sgd
- C언어
- 파이썬
- FastAPI
- 오차역전파법
- 소프트맥스 함수
- 책
- 코딩
- 우분투
- PostgreSQL
- 딥러닝
- flag
- Apache2
- AdaGrad
- 아파치
- 역전파
- 신경망
- Python
- Python Challenge
- CTF
- HTML
- PHP
- PICO CTF
- 설치
- 리뷰
- 백준
- 신경망 학습
- picoCTF
- 순전파
- Today
- Total
Story of CowHacker
파이썬_클래스 본문
파이썬 클래스!!
파이썬에 있는 클래스에 대해 알아보겠다.
먼저 왜 클래스가 만들어졌는지 왜 사용하는지에 대해 말하자면
내 친구의 사촌분인, 15년 차 개발자께서 말씀한 것에 따르면
**
1. 파이썬 초기에는 함수로도 충분히 코딩이 가능한 수준이었다.
2. 하지만 기술이 발전하고 더 큰 프로그램 구동이 필요하게 됐다.
3. 함수도 충분히 코드를 간단히 효율적으로 사용할 수 있다.
4. 하지만 더 큰 프로그램을 구동하기에 수정과 동시 연동을 하기에는 턱없이 비효율적이었다.
5. 클래스는 이런 함수의 단점을 보완할 수 있는 녀석이다.
**
testnum = 0
testnum2 = 0
def add(a):
global testnum
testnum += a
return testnum
def add2(a):
global testnum2
testnum2 += a
return testnum2
print(add(1))
print(add2(2))
위 코드를 보면 testnum, testnum2라는 변수를 함수를 사용하여 쓰려면 global 변수를 써줘야 하는 것이 보인다.
global 변수는 썩 좋지 않은 녀석이다.
그리고 만약 또 다른 역할을 하는 함수를 쓰려면 add3와 같은 함수를 하나 더 만들어 줘야 한다.
상당히 비효율적인 모습이다.
class testclass:
def __init__(self):
self.testnum = 0
def add(self, a):
self.testnum += a
return self.testnum
print(testclass().add(1))
print(testclass().add(2))
클래스를 사용한 코드를 보면 testnum를 사용하기 위해 global 변수를 적지 않았고,
굳이 testnum2를 만들 필요 없이 testnum하나로 동시 사용 가능하고,
무엇보다 동시 출력을 위해 같은 함수 두 개를 만들 필요가 없어진 모습을 볼 수 있다.
이까지 클래스를 왜 사용해야 하는지 살펴봤다.
이제 클래스는 어떻게 사용하는지에 대해 알아보겠다.
class testclass:
pass
print(type(testclass()))
가장 기본적인 클래스를 적어봤다.
pass는 아무것도 안 한다는 의미다.
타입은 역시나 클래스다.
그럼 이제 클래스를 사용하여 이전 글인 ' 파이썬_함수 ' 에서 사용한 함수를 같이 써보겠다.
https://cowhacker.tistory.com/117
바로 위 사진에 보이는 부분이다.
class testclass:
def source(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
test = testclass()
test.source(1,2)
print(test.add())
어떤 차이가 있나 보면
먼저 처음 ' 파이썬_함수' 코드에서 쓰이는
1번 2번 줄이 클래스를 사용한 코드에서는 source함수로 변한 것이다.
그리고 add함수는 클래스 안에 들어 있는 걸 볼 수 있다.
여기서 10번 줄 보면 source에게 매개변수 2개를 넘겨주는 걸 볼 수 있는데
클래스 안에 있는 source함수를 보면 받는 매개 변수가 3개인걸 알 수 있다.
위 사진을 보면 단번에 이해가 될 것이다.
self 변수에는 testclass를 호출한 객체 test가 자동으로 전달되기 때문에 결론적으로는 3개의 매개변수를 넘겨준 셈이다.
여기서 차이점을 느낀 사람이 있을 것이다.
처음 코드를 다시 보면
2번 줄에 __init__를 사용한 것이 보인다.
하지만 방금 코드에선 __init__대신 source를 사용했다.
이 둘의 차이점은 source는 매서드고, __init__는 생성자 ( constructor )가 된다.
source메서드의 역할은 변수를 선언하는 것이다.
이처럼 변수를 선언하는 경우는 생성자 __init__를 사용하는 것이 좋다.
class testclass:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
print(testclass(1,2).add())
10번 줄을 보면 확실히 아까와는 다르게 간단히 클래스를 호출하고 사용하는 것을 볼 수 있다.
이까지 클래스에 대해 알아봤다.
클 래스는
래 애정 깊은
스 킬이다.