-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Design pattern/heejae #7
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
학사 과정에서 안 배우는 디자인 패턴에 대해서 접할 수 있어서 좋았습니다!
내용은 개인적으로 어렵지만 여러번 보면서 이해할 수 있었어용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
python 이 익숙하지 않아 완전히 이해하진 못했지만 그럼에도 불구하고 충분히 완성도가 느껴집니다. 올라올 때 마다 디자인패턴 하나씩 공부하면 많은 도움이 될 듯 합니다 ㅎㅎ python 공부 좀 하고 와서 완전히 이해하겠습니다.ㅠㅠ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
디자인 패턴 공부가 막막해서 한없이 미루고 있었는데,, 너무 감사합니다 ㅠㅠ
파이썬에서 모듈이 싱글톤으로 설계되어 있다는 것이 정말 신기했고, 메타 클래스를 통해 DB 일관성을 보존하는 등에 사용할 수 있다는 활용 사례와 싱글톤 패턴의 단점까지 머리에 쏙쏙 들어왔습니다 !!
감사합니다 🤗🤗🤗
__init__ method called.. | ||
__init__ method called.. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
파이썬 문법을 완벽히 알고 있지 않아서 ..!
여기서 __init__ method called
는 왜 2번 출력되는지 궁금합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Singleton 클래스의 __instance 속성을 보면 초기 값이 None 입니다.
즉 처음엔 아무런 값도 안들어가 있다는 것이죠.
Singleton 클래스의 classmethod인 getInstance() 함수를 호출하지 않는 이상 __instance의 값은 None 입니다.
처음에 s = Singleton()
으로 Singleton객체를 생성하고 그 객체를 s 라는 변수에 담았습니다.
Singleton() 함수는 Singleton 클래스를 인스턴스화 해서 리턴합니다.
그리고 그 과정에서 init 함수를 무조건 실행합니다.
init 함수는 파이썬에서 미리 약속되어 있는 클래스의 '초기화자' 입니다.
함수 내부를 들여다보면 "init method called.." 를 출력하게 되어있죠.
출력 창의 첫줄에 있는 "init method called.." 는 s = Singleton()
코드에 의해 출력된 문장입니다.
그 이후에 print("Object created", Singleton.getInstance())
이 실행됩니다.
print() 내부를 보면 Singleton.getInstance()
이 있죠.
Singleton 클래스 자체로 getInstance() 메소드를 실행했습니다.
getInstance() 메소드 내부를 보면 cls.__instnace = Singleton()
이 있습니다.
클래스 변수 __instance에 Singleton 클래스의 객체를 생성해 넣어줍니다.
클래스를 인스턴스화 시키는 이 과정에서도 역시 init 함수가 실행됩니다.
이때에는 아직 __instance 의 값이 None 이기에 "init method called.." 가 한 번 더 출력됩니다.
그 이후에는 __instance 에 Singleton 클래스의 객체가 담겨 있기 때문에 더 이상
if not Singleton.__instance:
에 걸리지 않고
print("Instance already created:", self.getInstance())
를 실행하게 됩니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
헐 !! 맞네 !!
나 완전 격하게 이해했어요
__init__ method called..
=> s = Singleton()
__init__ method called..
=> Singleton.getInstance() : cls.__instance = Singleton()
Object created <__main__.Singleton object at 0x10ca025c0>
=> return cls.__instance
Instance already created: <__main__.Singleton object at 0x10ca025c0>
=> s1 = Singleton() : return cls.__instance
이거 맞지요? ㅎㅎ 자세하고 친절한 설명 감사합니다아 ㅠㅠㅠㅠㅎㅎㅎ
정희재 : 이론 + 구현 => +35점 |
변경 사항
Point of discussion
파이썬 클래스 문법을 잘 모르는 사람들에게는 코드 예시가 많이 어려울 수 있습니다.
그러나 앞으로도 이정도 수준의 문법만 사용하며 예시를 사용할 것입니다.
첫 주제인 싱글톤의 코드 예시에 있는 문법 정도만 익히면 앞으로 코드를 이해하는데 큰 어려움은 없을 것입니다.
디자인 패턴은 그 자체만으로 이해하기 쉽지 않은 학문입니다.
대신 한 번 익혀두면 실제 필드에 나섰을 때 분명 큰 도움이 됩니다.
글을 한 번 읽어보는 것만으로는 학습이 어렵습니다.
충분히 생각해보시고 이해하기 위해 노력해 봅시다.
(사실 저도 아직 제대로 이해를 못했습니다...)
Reference