BacknPacker / effective_java

이팩티브 자바 STUDY
1 stars 6 forks source link

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라. #8

Closed lee-ji-hoon closed 2 years ago

lee-ji-hoon commented 2 years ago

'왜 인스턴스화를 막아야 하는 걸까?' 라는 생각이 들었습니다.

  1. 메모리 낭비 방지
  2. 객체 로딩시간이 절대적으로 중요한 경우

이렇게 두 가지로 생각이 드는데 맞는지 궁금해서 Issues에 남겨봅니다.

quedevel commented 2 years ago

네 맞습니다.

시스템의 자원이 한정적이기 때문에 효율적으로 자원을 사용하는게 중요합니다.

협업에서 습관적으로 인스턴스를 만드는 개발자들이 존재하기 때문에 private으로 막는것이 중요합니다.

private으로 막지 않으면 잘 모르시는 개발자들은 습관처럼 인스턴스를 만드시는것도 무서운데 인스턴스 변수로는 내부의 정적 메소드에 접근할 수 없으니 동일한 내용의 public 메소드를 만들어서 사용하시는 것을 목격했습니다. 사실 이런 분들은 private로 막았어도 public으로 바꿔버리는 마법을 쓰셨을거라 생각하지만요... ㅎ

lee-ji-hoon commented 2 years ago

@quedevel

답변 감사합니다! 덕분에 궁금했던 내용이 해소됐습니다. 추가적으로 궁금한 점이 있습니다.

26p '객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이기 때문에 그리 곱게 보이지는 않지만, 분명 나름의 쓰임이 있다.'

라고 적혀져 있는데, 책의 유틸 클래스들을 제외하고 협업에서 자주 사용되는 방식인지 알 수 있을까요?

quedevel commented 2 years ago

@lee-ji-hoon

네 실제로 제가 지금 작업중인 프로젝트에서도 *Util.java 만 검색해도 너무 많이 나오는데, 거기에 선언되어있는 전역 변수나 전역 메소드는 셀 수 없이 많습니다.

'객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식' 이란것은 이렇게 많은 유틸이 있는데 전혀 전역적으로 사용하지 않아도 되는 비지니스를 전역 용으로 빼논걸 남용이라고 말하는것 같아요.

하지만, 실제로 만들다보면 전역으로 만들지 말지를 정하는 부분은 항상 애매모호하더라구요ㅜ

quedevel commented 2 years ago

@lee-ji-hoon

https://medium.com/@ehd8266/static%EC%9D%98-%EC%98%AC%EB%B0%94%EB%A5%B8-%EC%82%AC%EC%9A%A9%EB%B2%95%EC%9D%80-d95a7b91c6f8

찾아보니 static에 대한 좋은 글이 있네요

lee-ji-hoon commented 2 years ago

@quedevel

이런 의미로 남용을 한다는 말이였군요 이제 이해가 됐습니다!

그리고 예시 자료까지 찾아주시고 감사합니다!