issues
search
tonykang22
/
study
0
stars
0
forks
source link
[이펙티브자바] 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라.
#126
Open
callmeaxxe
opened
1 year ago
callmeaxxe
commented
1 year ago
아이템 15. 핵심 정리 - 구현과 API 를 분리하는 "정보 은닉"의 장점
TODO
아이템 15. 핵심 정리 - 클래스와 인터페이스의 접근 제한자 사용 원칙
TODO
아이템 15. 핵심 정리 - 멤버(필드, 메서드, 중첩 클래스/인터페이스)의 접근 제한자 원칙
TODO
callmeaxxe
commented
1 year ago
아이템 15. 완벽 공략 요약
p98, Serializable, “완벽 공략 13, 객체 직렬화” 참고
"Serializable 을 구현한 클래스에서는 그 필드들도 의도치 않게 공개 API 가 될 수도 있다."
private
,
package-private
이어도 공개될 수 있다는 의미인데,
역직렬화를 하게되면 해당 필드도 그대로 존재하게 되어야 하기 때문에 공개된다의 의미
p98, 리스코프 치환 원칙, “완벽 공략 26” 참고
"상위 클래스의 인스턴스는 하위 클래스의 인스턴스로 대체해 사용할 수 있어야 한다는 규칙(리스코프 치환 원칙, 아이템 10)을 지키기 위해 필요하다"
하위 클래스에서의 method overriding 의 경우, 상위 클래스의 접근 제한자보다 좁은 범위로 설정할 수 없다
p99, 스레드 안전 (Thread Safe), “완벽 공략 28” 참고
"public 가변 필드를 갖는 클래스는 일반적으로 스레드 안전하지 않다."
스레드는 실행 순서를 예측할 수 없으므로
p99, 불변 객체, “완벽 공략 24, Value 기반의 클래스” 참고
"해당 클래스가 표현하는 추상 개념을 완성하는 데 꼭 필요한 구성요소로써의 상수라면 public static final 필드로 공개해도 좋다. ...
이런 필드는 반드시 기본 타입 값이나 불변 객체를 참조해야 한다(아이템 17).
"
상수로 공개해야 하는 필드는 불변 객체를 참조해야 한다는 의미
p100, 자바 9 모듈 시스템
"자바 9에서는 모듈 시스템이라는 개념이 도입되면서 두 가지 암묵적 접근 수준이 추가되었다."
아이템 15. 완벽 공략 - 자바 플랫폼 모듈 시스템 1
Java Platform Module System (JPMS)
JSR-376 스팩으로 정의한 자바의 모듈 시스템
모듈, 컴포넌트 간 관계를 표현할 수 있는 방법을 제공
기존에는 classpath 에 참조할 Jar 파일을 넣어 사용했었음
이 방식은 해당 Jar 파일이 없거나, 버전이 다른 경우 실제 참조가 일어나는
런타임에 에러를 발생시킨다
컴포넌트간 관계 표현에도 제한적
Java9 에 이를 개선하여 모듈 시스템을 추가함
Java9 모듈 시스템 특징
안정성 - 순환 참조 허용하지 않음, 실행시 필요한 모듈 확인, 한 패키지는 한 모듈 에서만 공개할 수 있음.
캡슐화 - public 인터페이스나 클래스라 하더라도, 공개된 패키지만 사용할 수 있다. 내부 구현을 보호하는 수단으로 사용할 수 있다. (하지만 모듈이 아닌 곳에서 참조한다면...)
확장성 - 필요한 자바 플랫폼 모듈만 모아서 최적의 JRE를 구성할 수 있다. 작은 기기에서 구동할 애플리케이션을 개발할 때 유용하다.
모듈 시스템이 적용된 프로젝트
module
파일이 루트 경로에 있으면 모듈 시스템이 적용된 것
모듈명은 보통 패키지 이름과 동일하게 사용
아이템 15. 완벽 공략 - 자바 플랫폼 모듈 시스템 2
Java9 모듈 시스템은 "모듈" 에서 쓸 때만 의미가 있어 잘 쓰이지 않음
예제 생략
아이템 15. 핵심 정리 - 구현과 API 를 분리하는 "정보 은닉"의 장점
아이템 15. 핵심 정리 - 클래스와 인터페이스의 접근 제한자 사용 원칙
아이템 15. 핵심 정리 - 멤버(필드, 메서드, 중첩 클래스/인터페이스)의 접근 제한자 원칙