-
Notifications
You must be signed in to change notification settings - Fork 38
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
[아이템 04] 인스턴스화를 막으려거든 private 생성자를 사용하라 #4
Comments
자바에서는 함수가 클래스 외부에 존재할 수 없기 때문에 유틸리티 클래스를 정의해야 한다는 점이 재밌네요. 기존의 절차지향적 언어들이나 (예: C, 연장선인 C++) 함수가 일급객체인 언어들 (예: Python)은 클래스 외부에 있는 함수를 레퍼런스하는 것이 가능하기 때문에 인스턴스화 하지 않을 개념을 클래스로 정의하는 것이 부자연스러운 것이니까요. 언어가 가지고 있는 한계점을 best practice로 보완하는 게 흥미롭습니다. 추가적으로 우리가 배운 스프링, 특히 DDD와 연결지어 생각하면 유틸리티 클래스를 사용하기 보다는 서비스 객체를 만들어 사용하는 게 더 자연스러워서 유틸리티 클래스를 정의해서 사용했던 경우는 스프링을 잘 몰랐던 초반 이후로는 잘 없었던 같기는 하네요. |
기본 생성자의 동작 방식과 서브클래스에서 슈퍼클래스의 생성자가 적용되는 방식이 잘 정리된 링크 |
이렇게 쓰신 건, 함수가 일급객체인 언어들은 클래스 외부에서 함수를 참고하는 것이 가능하기에, Item4에서 정의하고 있는 클래스의 인스턴스화를 막는 개념? 컨셉? 자체를 생각하는 게 이상하는 뜻인가요? |
링크주신 것에서는 이게 핵심인듯 한데.. 제가 이해한 게 맞을까요 |
클래스라는 개념 자체가 객체의 성질을 정의하기 위해서 존재하는 것인데 인스턴스화를 막을 이유는 (1) 싱글톤이거나 (2) 원래 객체가 아니었다 둘 중 하나인데 애초에 개념적으로는 유틸리티 클래스는 유틸리티 클래스가 아니었어야 하지만 자바의 언어적 한계상 클래스로 정의된 거죠. |
아이템 주제와 연결지어서 더 풀어서 얘기를 하자면:
|
모호하던 부분이 확실하게 이해되었습니다 ! 💯 |
No description provided.
The text was updated successfully, but these errors were encountered: