prgrms-web-devcourse / BE-Team-preArmand-Book-study

2 stars 2 forks source link

[아이템 17] 질문 모음 #8

Closed yuminhwan closed 2 years ago

yuminhwan commented 2 years ago
  1. p.111

    이 방식은 바깥에서 볼 수 없는 package-private 구현 클래스를 원하는 만큼 만들어 활용할 수 있으니 훨씬 유연하다.

아이템 1에서 설명한 EnumSet을 말하는 것과 같은 걸까요?


  1. 불변 객체를 참조하는 객체라면 Thread-safe 할까요?
epicblues commented 2 years ago
  1. 오 그런 것 같습니다? 만약에 말씀하신 EnumSet과 같은 논리로 진행된다면 코드 17-2의 Complex의 같은 패키지 안에 Complex를 상속 받는 package private 하위 클래스를(예를 들어 BigComplex, SmallComplex) 만들고 Complex의 valueOf를 이런 식으로 정의할 수 있겠네요.
public static Complex valueOf(double re, double im) {
   if(re + im > 100)
       return BigComplex(re, im);

   return SmallComplex(re, im_);
}
  1. reflection을 통한 final 변경과 같은 기괴한 방법을 사용하지 않는 이상 Thread-safe 하다고 생각합니다. 아닐 수도 있습니다!
Leeyerimearth commented 2 years ago
  1. 저 문장자체가 이해가 잘 안갔는데 민성님 말씀해주신거 보고 이렇게 이해했습니다. 제가 이해한게 맞을까요?? 정적 팩토리를 제공해서 실제 package private한 클래스의 객체를 리턴해 줄 수 있다. 다만 그래서 장점이 무엇인지 잘 모르겠습니다🥲 package-priavate 객체를 리턴받는것까지는 ok지만, 해당 객체의 메서드를 사용할 수 없으니 변경가능성이 없다??일까요? 책에서 이어지는 다음 문장과의 연결도 잘 모르겠네욥.

  2. 말씀주신 불변객체를 참조하는 "객체" 가 불변객체를 필드로 가지고있는 객체라는 의미일까요??(제가 잘 몰라 여쭙습니다. 🙇‍♂️) 혹시 그렇다면, 그 참조하는 인스턴스 변수 자체가 final이 아니라면 thread-safe하지 않지 않을까요? 다른 객체를 가리킬 수 있으니까요. 불변 객체 자체는 thread-safe해도요.