Programming/python

Udemy Python Boot Camp Section 17 정리 | OOP(객체 지향 프로그래밍) 구현하기

자히Zahi 2024. 11. 9. 16:29

* 이 글은 필자가 자신이 배운 내용을 정리하기 위한 것이며, 결코 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 끝!