Skip to content
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

Merged
merged 2 commits into from
Jan 20, 2021
Merged

Design pattern/heejae #7

merged 2 commits into from
Jan 20, 2021

Conversation

Hee-Jae
Copy link
Collaborator

@Hee-Jae Hee-Jae commented Jan 17, 2021

변경 사항

Issue 참고 : Note Status Check

  1. DesignPattern Singleton 이론정리 및 자료정리

Point of discussion

파이썬 클래스 문법을 잘 모르는 사람들에게는 코드 예시가 많이 어려울 수 있습니다.
그러나 앞으로도 이정도 수준의 문법만 사용하며 예시를 사용할 것입니다.
첫 주제인 싱글톤의 코드 예시에 있는 문법 정도만 익히면 앞으로 코드를 이해하는데 큰 어려움은 없을 것입니다.

디자인 패턴은 그 자체만으로 이해하기 쉽지 않은 학문입니다.
대신 한 번 익혀두면 실제 필드에 나섰을 때 분명 큰 도움이 됩니다.
글을 한 번 읽어보는 것만으로는 학습이 어렵습니다.
충분히 생각해보시고 이해하기 위해 노력해 봅시다.
(사실 저도 아직 제대로 이해를 못했습니다...)

Reference

Copy link
Collaborator

@3people 3people left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

학사 과정에서 안 배우는 디자인 패턴에 대해서 접할 수 있어서 좋았습니다!
내용은 개인적으로 어렵지만 여러번 보면서 이해할 수 있었어용

Copy link
Collaborator

@JuseobJang JuseobJang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

python 이 익숙하지 않아 완전히 이해하진 못했지만 그럼에도 불구하고 충분히 완성도가 느껴집니다. 올라올 때 마다 디자인패턴 하나씩 공부하면 많은 도움이 될 듯 합니다 ㅎㅎ python 공부 좀 하고 와서 완전히 이해하겠습니다.ㅠㅠ

Copy link
Owner

@Seogeurim Seogeurim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

디자인 패턴 공부가 막막해서 한없이 미루고 있었는데,, 너무 감사합니다 ㅠㅠ
파이썬에서 모듈이 싱글톤으로 설계되어 있다는 것이 정말 신기했고, 메타 클래스를 통해 DB 일관성을 보존하는 등에 사용할 수 있다는 활용 사례와 싱글톤 패턴의 단점까지 머리에 쏙쏙 들어왔습니다 !!
감사합니다 🤗🤗🤗

Comment on lines +74 to +75
__init__ method called..
__init__ method called..
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

파이썬 문법을 완벽히 알고 있지 않아서 ..!
여기서 __init__ method called는 왜 2번 출력되는지 궁금합니다!

Copy link
Collaborator Author

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()) 를 실행하게 됩니다.

Copy link
Owner

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

이거 맞지요? ㅎㅎ 자세하고 친절한 설명 감사합니다아 ㅠㅠㅠㅠㅎㅎㅎ

@Seogeurim Seogeurim merged commit 6a396d6 into main Jan 20, 2021
@Seogeurim
Copy link
Owner

Seogeurim commented Jan 20, 2021

정희재 : 이론 + 구현 => +35점
PR 리뷰자 : 세명, 주섭, 그림 => 각 +5점

@Seogeurim Seogeurim added the score OK Score Board에 점수 반영 완료 label Mar 22, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
score OK Score Board에 점수 반영 완료
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants