샘플봇 어서오고...
가 아니라!
discord.py 문서를 살펴봅시다.
discord.Client의 속성과 메소드 화면입니다.
여기서 우리가 모르는 것을 추려보면,
1. discord.Client 앞에 붙는 class는 무엇인가?!
2. Methods가 대체 뭘 의미하는 것인가?
3. 그래서 이거 어떻게 써야 에러가 안나는건데?!
정도겠지요...
1. 클래스? 메소드? 객체지향?
그래서 저는 객체지향을 배워야겠다 생각하고 찾아봤습니다. 생활코딩 강의 5개(1개에 평균 10분)를 듣고 이해가 됐네요. 생활코딩은 사랑입니다. 정말루. https://opentutorials.org/course/1750/9624
그렇지만! 일러요. 이릅니다. 우리는 '비유'를 사용할 수 있어요. class가 뭔지 이해하진 못하더라도, 대강 쓸 줄 알게만 배우면 되지 않겠습니까? (사실 다음에 객체지향을 정식으로 설명할 예정이긴 합니다... 자료구조때문에)
객체지향 설명(건너뛰어도 됩니다)
간단하게 객체지향은 그 자체로는 너무 철학적이기 때문에, 사람으로 비유할 수 있어요. 사람은 그 자체의 특성과 다른 사람과의 관계로 이루어져 있죠? 그걸 한 단위로 묶어버리고, 이를 객체라고 칩시다. 6개의 객체가 있으면 하나의 객체당 그 사람이 어떤 사람인지와 다른 5명과의 관계가 어떻게 되는지를 저장하는겁니다. 그럼 그 6명의 인간관계를 모두 표현할 수 있겠죠? (물론 완전히 들어맞는 설명은 아닙니다.)
앞선 강의에서 파이썬의 함수는 '1급 객체' 라고 했습니다. 입력값에 함수를 넣을 수 있고, 함수명을 참조할수도 있으며, 함수형태로 출력할 수 있다고 했었죠. 그렇다면, 이렇게 자유도가 높은 객체를 변수에는 넣을 수 없을까요?
넣을 수 없죠... 함수는 함수명 자체만으로도 충분하니까요. 변수와 함수 모두 자기 자리가 있는 녀석들입니다.
그래서 어떤 사람이 꾀를 써서 함수의 성격을 갖는 변수를 만들어버립니다. 변수이지만 뒤에 함수를 쓰기만 하면 새로운 변수를 만들 수 있다는 발상입니다. '함수의 성격을 갖는 변수'를 만들려면 함수의 이름과 변수를 같이 저장하면 나중에 그 변수를 쓸 때도 함수의 기능을 참조할 수 있겠죠?
디스코드에 적용하면 다음과 같습니다. 각각을 모두 함수라 표현했었는데, 원래는 위계에 따라 명칭이 따로 붙어요. discord를 '모듈', Client()를 '클래스(class)', run()을 '메소드(Methods)'라고 할 수 있어요. 특히 Client() 클래스는 특이해서, 변수도 같이 지정해준답니다.(일반적으론 뒤에 변수를 뜻하는 인스턴스(instance)가 붙어요)
저 코드에서는 말그대로 client가 객체 역할을 합니다. 그래서 객체 지향이라 불릴 수 있는거죠.
근데 왜 이런 기능을 만드는걸까요? 그냥 항상 discord.Client().run()처럼 써도 되지 않나요? 예 됩니다. 단지 client라는 변수에 함수를 저장할 수 있다는 점을 강조하기 위해서이고, 샘플봇 코드에도 저렇게 나와있긴 합니다.
그럼 이제 각 명칭들을 이해했으니 API로 넘어가봅시다.
2. API 문서 활용법
명령어를 입력하면 디코봇이 답장한다... 정도는 쉽게 구현할 수 있을겁니다. 간단한 정보봇을 만들기 위해 여기까지 오진 않았죠. 디스코드봇을 이해했으니 지지고 볶을 수 있어요. 시도해보시기 바랍니다.
https://discordpy.readthedocs.io/en/latest/#
이로써 디스코드봇 이해하기 시리즈가 마무리 됩니다. 이후에 구현한 부분별로 추가적인 포스팅이 올라올겁니다. 감사합니다.
태그된 시리즈 바로가기 ↓↓
https://ghlabnote.tistory.com/tag/디스코드봇
https://ghlabnote.tistory.com/tag/파이썬%20문법
'프로젝트 > 설명' 카테고리의 다른 글
카페24 쇼핑몰 2. 개발환경 세팅하기(FTP) (0) | 2021.10.22 |
---|---|
카페24 쇼핑몰 1. 시작하기 (0) | 2021.10.22 |
디스코드봇 5. 코드의 원리 파악하기 (2) 데코레이터 (0) | 2020.12.20 |
CSS 핵심 내용 정리 (0) | 2020.12.17 |
디스코드봇 4. 코드의 원리 파악하기 (1) 비동기 처리 (0) | 2020.12.01 |