* 이 글은 필자가 자신이 배운 내용을 정리하기 위한 것이며, 결코 Udemy 강의를 결제하지 않은 타인의 학습을 고려하여 작성되지 않았습니다.
* 이 글을 학습에 활용하기를 원하신다면, Udemy에서 '[한글자막] Python 부트캠프 : 100개의 프로젝트로 Python 개발 완전 정복' 강의를 구매하시는 것을 권장드립니다.
요즘 아침에 일어나면 명상을 한다. 정확히는 하루 일과 중 "기상"파트에 명상을 넣어놔서, 명상을 하도록 유도하였다.
지도 음성 없이 하루에 3분 정도만 하고 있는데, 나쁘지는 않은 것 같다. 이렇게 미라클모닝을 하나씩 실천하는 거겠지 싶다.
각설하고, 본론으로 들어가자면 이번 섹션은 큰 내용이 없다. 클래스를 만드는 데에 사용되는 핵심 내용은 섹션 16정리에 담았으므로 그 부분을 참고하면 좋다.
이 포스트는 전에 간단하게 다룬 클래스 제작에 대한 내용을 좀더 상세하게 다룬다. 그러니 클래스를 이미 만들줄 아
이번 강의는 직접 class를 만든다.
맨 처음에 강의에서 빈 클래스나 함수를 만드는 방법을 알려주는데,
#code
class User:
print("Hello World!")
와 같이 코드를 작성하면 파이썬은 "어? 왜 클래스(함수)가 비어있지? 잘못 입력했나보다! 하고 오류를 출력한다.
그럴 때에는
#code
class User:
pass
print("Hello World!")
와 같이 'pass'를 적어 이 부분은 비워놓는다고 알려두자.
어제 coffe machine 코드에서는 class 안에 속성을 넣었을 것이다.
#code
class User:
id = "001"
user_01 = User()
print(user_01.id)
#output
001
와 같은 식이다.
그런데 굳이 이렇게 하지 않고
#code
class User :
pass
user_01 = User()
user_01.id = "001"
print(user_01.id)
#output
001
이렇게, 객체를 만든 이후에 객체에 속성(attribute)을 추가하는 방법도 있다.
전자는 그 클래스로 만들어지는 모든 객체에 해당 속성을 추가하지만, 후자는 객체 중 하나에 속성을 추가한다는 점에서 차이가 있다. 용도를 달리 하자.
이때, 전자를 할 때에는 보통 initialize, 객체 초기화를 한다.
#code
class User:
pass
user_01 = User()
user_01.id = "001"
user_01.username = "Angela"
user_02 = User()
user_02.id = "002"
user_02.username = "jack"
id와 name을 가진 여러 객체를 만들때, 이런식으로 일일이 선언하는 방법이 있다. 앞에서 보여준 후자의 방법이다.
이런 번거로움을 대체하는 것이, 바로 __init__함수이다.
__init__함수는 객체가 생성됨과 동시에 실행된다.
__init__함수를 사용할 때에는 매개변수에 self라는 것이 있는데, 그냥 객체의 이름이라고 생각하면 된다. 실제로 함수를 만들 때에 self의 인자에 해당되는 값을 넣을 필요는 없다. (객체 생성 시에 등호의 왼쪽에 들어갈 것이기에)
#code
class User:
def __init__(self, user_id, user_name):
self.id = user_id
self.username = user_name
user_01 = User("001", "Angela")
user_02 = User("002", "Jack")
결과적으로는 이런 코드가 만들어진다.
앞의 코드와 결과물은 같지만, 더 간결해졌다.
여기서는 user_id가 id가 되는 식으로 매개변수와 속성의 이름을 달리 했지만, 이를 같게 하는 게 관행이라고 한다.
#code
class User:
def __init__(self, id, username):
self.id = id
self.username = username
이런식으로 하는 게 관행이라는 것 같다. 알아두자.
그리고 굳이 모든 속성을 매개변수에 넣을 필요는 없다.
모든 객체가 같은 값으로 시작하는 매개변수가 있다면, 그저 정의만 하면 될 것이다.
#code
class User:
def __init__(self, id, username):
self.id = id
self.username = username
self.followers = 0
이런식이다.
#code
class User:
def __init__(self, id, username):
self.id = id
self.username = username
self.followers = 0
self.fallowing = 0
def follow(self, user):
self.following += 1
user.followers += 1
user_01 = User("001", "Angela")
user_02 = User("002", "Jack")
user_01.follow(user_02)
print(user_01.followers)
print(user_01.following)
print(user_02.followers)
print(user_02.following)
#output
0
1
1
0
메소드도 비슷하게 사용할 수 있다.
객체지향 프로그래밍이 절차지향 프로그래밍에 비해 프로그램을 더 복잡하게 만들 수 있다고 하는데, 사실 아직까지는 절차지향이 더 익숙해서 복잡한 프로그램도 절차지향으로 만들면 안되나... 하는 마음이 든다...ㅋㅋㅋ
그래도 익숙해지면 이게 더 좋을테니까 (그러니까 만들었겠지) 많이 해봐야겠다.
섹션 17 끝!