이야기박스

Effective java 3/E - item 15~25 본문

Programming Language/JAVA

Effective java 3/E - item 15~25

박스님 2018. 11. 29. 13:23
반응형

Item 15. 클래스 멤버의 접근 권한을 최소화하라

[캡슐화(정보 은닉)] 

--> 소프트웨어 설계의 근간


* parnas72 

==> "On the Criteria To Be Used in Decomposing Systems into Modules"

( paranas72 참조 pdf 링크 )


  • 개발 속도 상승
  • 관리 비용 낮춤
  • 성능 최적화
  • 재사용성
  • 시스템 제작 난이도
* 돌고 돌아서 서로 관련됨...

기본 원칙 ==> 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다.

package-private을 쓰는 이유?
--> 내부 모듈이 되어 다음 릴리스에 쉽게 업데이트 가능
--> public으로 한다면, 하위 호환을 계속 신경써주어야 함

public class의 public 필드는 스레드 세이프 하지 못함

가변 배열의 경우



* Java9과 모듈에 대하여 --> 링크


Item 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라.

- public class에서는 절대로 가변인자를 public으로 제공하지 말 것


- private-package 혹은 private 클래스라면 데이터 필드를 노출해도 상관 없음

--> package-priavte class를 참조하는 클래스 또한 내부 동작일 뿐이므로 설계만 잘하자


* effective java에서 소개하는 안좋은 사례


Item 17. 변경 가능성을 최소하하라

string --> permanent 영역 ==> heap 영역으로 넘어옴 (java 7부터)

Item 18. 상속보다는 컴포지션을 사용하라

포워딩 --> interface 함수를 구현하는 것

Item 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

상속할때는 문서화를 잘 해 둬라.. 

Item 20. 추상 클래스보다는 인터페이스를 우선하라

공통부분 많을때 --> 추상클래스

각자 구현할때 --> 인터페이스

Item 21. 인터페이스는 구현하는 쪽을 생각해 설계하라

default method 추가 가능 ==> 다음 릴리즈에서 추가된 기능을 default로 제공해주는 것

Item 22. 인터페이스는 타입을 정의하는 용도로만 사용하라

interface

- 변수에는 final이 붙음 // method에는 public으로

Item 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라

abstract 클래스로 표현하고 코드레벨에서 명확하게 구현할 수 있도록 지원할 것

Item 24. 멤버 클래스는 되도록 static으로 만들라

익명 클래스 --> template callback pattern 

Item 25. 톱레벨 클래스는 한 파일에 하나만 담으라

파일 하나에 하나의 클래스만 담아라

이렇게 하지 않으면 컴파일 시간에 따라서 결과가 달라질 수 있음

반응형