Closed david215 closed 4 years ago
p100 자바 9에서 모듈 시스템이라는 개념이 도입되면서...
간단하게나마 모듈 시스템에 무엇인지 공유해보면 좋을 것 같아요. 그리고 2가지 접근 수준이 추가되었다고 하는데,
... 모듈의 jar 파일을 자신의 모듈 경로가 아닌 애플리케이션..... 마치 모듈이 없는 것처럼 행동한다.
라는 말이 어떤 의미 인지 잘 감이 안 오네요. 모듈이 없는 것 처럼 행동한다는 말은, 모듈에서 제공하는 2가지 접근 수준이 적용되지 않는 다는 말일까요?
p99 public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않다.
스레드 안전(thread 安全, 영어: thread safety)은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.
스레드 안전하지 않다라는 뜻은 해당 필드가 여러 클라이언트 단에서 사용하여 위험하다는 뜻으로 해석하면 되나요?
p100
private static final Thing[] PRIVATE_VALUES = {...}; public static final Thing[] values() { return PRIVATE_VALUES.clone(); }
여기서의 방어적 복사라는 건 Deep Copy라고 볼 수 있나요? 만약 그렇다면 성능상 좋질 않으니 첫번째 방법인 public 불변 리스트를 추가하는 편이 제일 좋은 방법일까요?
@kses1010
Q1
Q2
방어적 복사가 Deep Copy를 말하는 것 같아요!
첫번째 방법인 public 불변 리스트를 추가하는 편...
는 어떤 의미인지 잘 감이 안오네요
https://johngrib.github.io/wiki/defensive-copy.md , 이 자료도 좋네요! 같이 보면 좋을듯 합니다
단순하게 list에 final을 붙이는 것이 아닌 Collections클래스의 unmodifiableList메서드를 사용하는 것 같아요.
@wooody92
한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터페이스는 이를 사용하는 클래스 안에 private static으로 중첩시켜보자 (p.97 )
한 클래스에서만 사용하는 클래스는 톱레벨 클래스일 필요가 없기 때문에 이를 사용하는 클래스 안에 nested class로 정의하면 된다는 뜻으로 보이네요.
위 내용이 이해가 잘 안가는데 간단하게 설명 부탁드립니다..!
-> 핵심은 한 클래스에서 사용하는 일회성 이너 클래스는 접근제어자를 이용하여 외부에서 접근 불가하게 한다. (사이드 이펙트 방지)