전체 글 34

ITEM17 변경가능성을 최소화하라

정리 불변 클래스란 간단히 말해 그 인스턴스의 내부값을 수정할 수 없는 클래스다. String, 기분타입의 박싱된 클래스들, BigInteger, BigDecimal이 여기 속한다. 불변클래스는 갑녀클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 안전한다. 규칙 - 객체의 상태를 변경하는 메서드(뼌경자)를 제공하지 않는다. - 클래스를 확장할 수 없도록 한다. - 모든 필드를 final로 선언한다. - 모든 필드를 private으로 선언한다. - 자신 외에는 내부의 가변컴포넌트에 접근할 수 없도록 한다. 불변 객체는 근본적으로 스레드 안전하여 따로 동기화할 필요 없다. 불변 객체는 안심하고 공유할 수 있다. 불변 객체는 자유롭게 공유할 수 있음은 물론, 불변 객체끼리는 내부 데이터..

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

정리 패키지 바깥에서 접근할 수 있는 클래스라면 접근자를 제공함으로써 클래스 내부 표현방식을 언제든 바꿀 수 있는 유연성을 얻을수 있다. 하지만 private-package 클래스 혹은 private 중첩 클래스라면 데이터 필드를 노출한다 해도 하등의 문제가 없다. public 클래스는 절대 가변필드를 직접 노출해서는 안된다. 불변 필드라면 노출해도 덜 위험하지만 완전히 안심할 수는 없다. 하지만 package-private 클래스나 private 중첩 클래스에서는 종종 필드를 노출하는 편이 나을 때도 있다.

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

모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다는 것은, 소프트웨어가 올바로 동작하는 한 항상 가장 낮은 접근 수준을 부여해야 한다는 뜻이다. 멤버(필드, 메서드, 중첩 클래스, 중첩인터페이스)에 부여할 수 있는 접근 수준은 4가지다. private : 멤버를 선언한 톱래벨 클래스에서만 접근할 수 있다. package-private : 멤버가 소속된 패키지 안의 모든 클래스에서 접근할 수 있다. 접근 제한자를 명시하지 않았을때 적용되는 패키지 수준이다.(단, 인터페이스의 멤버는 기본적으로 public 이 적용된다.) protected : package-private 의 접근 범위를 포함하며, 이 멤버를 선언한 클래스의 하위클래스에서도 접근 할 수 있다. public : 모든곳에서 접근할 수 있다.

ITEM14 comparable 을 구현할지 고려하라

요점 compareTo 는 object 의 메서드가 아니다. 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하고, equals 와 같다. 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 comparable 인테페이스를 구현하자. 일반규약 이 객체와 주어진 객체의 순서를 비교한다. 이 객체가 주어진 객체보다 작으면 음의 정수를, 같으면 0을 , 크면 양의 정수를 반환한다. 이 객체와 비교할 수 없는 타입의 객체가 주어지면 ClassCastException 을 던진다. Comparable 을 구현한 클래스는 모든 x, y에 대해 sgn(x.compareTo(y)) = - sgn(y.compareTo(x))여야 한다. Comparable 을 구현한 클래스는 추이성을 보장해야..