일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바 필터
- 스프링di
- 도커 이미지 빌드
- Spring
- fetch join
- spring formatter
- 기능적 요구사항
- java predicate
- kotlin ::
- kotlin 리팩터링
- open-session-in-view
- ioc컨테이너
- Atomicity
- 스프링부트 도커
- 비기능적 요구사항
- 정적팩토리메서드
- method refetence
- 수정자주입
- 생성자주입
- 스프링 시큐리티 설정
- 토비의 스프링
- jpa lazy
- 소프트웨어의 품격
- 동적파라미터
- 스프링 포매터
- 그래프큐엘
- jpa no session
- 스프링
- IOC
- 스프링시큐리티
Archives
- Today
- Total
공부기록
아이템15. 클래스와 멤버의 접근권한을 최소화하라. 본문
반응형
클래스와 멤버의 접근권한을 최소화하라.
잘 설계된 컴포넌트?
- 잘 설계된 컴포넌트는 바로 클래스 내부 데이터와 내부 구현정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐로 판단.
- 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 api를 깔끔히 분리.
- 오직 api로만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 관심도 없다. (정보은닉, 캡슐화)
정보은닉의 장점.
- 개발속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문.
- 관리비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅이 가능. 다른 컴포넌트로 교체하는 부담도 낮다.
- 성능최적화에 도움을 줄 수 있다. 다른 컴포넌트에 영향 주지않고 해당 컴포넌트만 최적화 할 수 있기 때문.
- 소프트웨어 재사용성을 높인다. 독자적으로 동작할 수 있는 컴포넌트라면 낯선 환경에서도 유용하게 쓰일 가능성이 높기 때문.
- 큰 시스템을 제작하는 난도를 낮춰준다. 전체가 완성안됐더라도 개별 컴포넌트의 동작을 검증할 수 있기 때문.
정보은닉을 위한 장치
- 접근제한자.
- 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야한다.
- 패키지외부에서 쓸 이유 없다면 package-priave으로 선언하자. 그럼 내부구현이 되어 언제든 수정할 수 있다.
- public으로 선언한다면 api가 되므로 영웡히 관리 필요.
- 한 클래스에서'만' 사용하는 package-private 톱레벨 클래스나 인터페이스는 이를 사용하는 클래스 내에 private static으로 중첩시키자.
- 공개 API를 설계한 후 그 외의 모든 멤버들은 private으로 만들자. 그런 다음 같은 패키지의 다른 클래스가 접근해야 하는 멤버에 한하여 package-private으로 풀어주자.
반응형
'JAVA' 카테고리의 다른 글
아이템24. 멤버클래스는 되도록 static으로 만들라. (0) | 2019.12.17 |
---|---|
아이템 17. 변경가능성을 최소화하라. (0) | 2019.12.11 |
아이템12. toString을 항상 재정의하라 (0) | 2019.12.01 |
아이템11. equals를 재정의하려거든 hashCode도 재정의하라. (0) | 2019.11.30 |
아이템 10. equals는 일반 규약을 지켜 재정의하라 (0) | 2019.11.29 |