bumdream / morning_study

1 stars 0 forks source link

[수정중] 4장 클래스와 인터페이스 #8

Open tituvely opened 6 years ago

tituvely commented 6 years ago

규칙 13 클래스와 멤버의 접근 권한은 최소화하라

  1. private : 최상위 레벨 클래스 내부에서만 접근 가능
  2. package-private(default) : 같은 패키지 내의 아무 클래스나 사용 가능
  3. protected : 하위 클래스, 선언된 클래스와 같은 패키지에 있는 클래스에서도 사용 가능
  4. public : 어디서도 사용 가능

    규칙 14 public 클래스 안에는 public 필드를 두지 말고 접근자 메서드를 사용하라


    규칙 15 변경 가능성을 최소화하라

    • 변경 불가능(immutable) 클래스는 그 객체를 수정할 수 없는 클래스다. ex) String, 기본 자료형 클래스, BigInteger, BigDecimal
    • 장점

    • 불변 객체는 한가지 상태만 가지므로 단순

    • thread-safe하여 어떤 동기화도 필요 없다. (변경 불가능한 객체는 자유롭게 공유 가능하다.)

    • 복사없이 그 내부도 공유가 가능하다. (String에서 같은 문자열을 참조하는 것)

    • 다른 객체의 구성요소로도 훌륭하다.

    • 단점

    • 변경 불가능 객체의 유일한 단점은 값마다 별도의 객체를 만들어야 하므로 성능 문제가 발생할 수 있다.

    • 대안 1.다단계 연산 가운데 자주 요구되는 것을 기본 연산(primitive)으로 제공 2.변경 가능한 package-private 동료 클래스를 사용, 같은 값을 다시 요구하면 캐시한 값(비-final 필드)을 반환하여 재계산 비용을 줄인다.(Flyweight)

규칙 16 계승하는 대신 구성하라

* 메서드 호출과 달리, 계승은 캡슐화(encapsulation) 원칙을 위반한다, 계승 메커니즘은 상위 클래스의 문제를 하위 클래스에 전파시킨다. 반면 구성 기법은 그런 약점을 감추는 새로운 API를 설계할 수 있도록 해 준다.
* 

wrapper class, decorator pattern, 구성과 전달기법을 아울러 위임(delegation)이라고 부르기도 한다.

규칙 17 계승을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 계승을 금지하라

* 재정의 기능 메서드를 내부적을 어떻게 사용하는지(self-use) 문서로 반드시 남겨라
* 

클래스 내부 동작에 개입할 수 있는 훅(hooks)을 신중하게 고른 protected 메서드 형태로 제공해야 한다.

규칙 18 추상 클래스 대신 인터페이스를 사용하라

* 인터페이스는 믹스인(mixin)을 정의하는 데 이상적이다. (추가로 구현할 수 있는 자료형으로, 어떤 선택적 기능을 제공한다는 사실을 선언하기 위해 쓰인다.)
* 

Java 1.8부터 default 메서드를 통해 인터페이스에도 구현을 일부 포함 가능

규칙 19 인터페이스는 자료형을 정의할 때만 사용하라

규칙 20 태그 달린 클래스 대신 클래스 계층을 활용하라

규칙 21 전략을 표현하고 싶을 때는 함수 객체를 사용하라

규칙 22 멤버 클래스는 가능하면 static으로 선언하라