책/이펙티브 자바 3e
-
아이템17) 변경 가능성을 최소화하라책/이펙티브 자바 3e 2022. 3. 5. 13:44
클래스를 불변으로 만드려면 다음 다섯가지 규칙을 따르면 된다. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. final을 사용하거나 모든 생성자를 private 혹은 package-private으로 만들고 public 정적 팩터리를 제공 모든 필드를 final로 선언한다. 모든 필드를 private으로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 불변 객체의 장점 불변 객체는 단순 시작부터 끝까지 동일함 불변 객체는 근본적으로 스레드 안전하여 따로 동기화할 필요가 없다. 여러 스레드가 동시에 사용해도 절대 훼손되지 않음 불변 객체는 자유롭게 공유할 수 있고, 불변 객체끼리는 내부 데이터를 공유할 수 있다. 값이 변하지 않으니 공유를..
-
아이템 22) 인터페이스는 타입을 정의하는 용도로만 사용하라책/이펙티브 자바 3e 2022. 3. 3. 14:29
아이템22) 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 함 즉, 인터페이스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것 인터페이스를 상수 공개용 수단으로 사용하지 말자 상수 인터페이스 안티패턴 - 사용금지! public interface Constants { static final int MAX = 9; static final int MIN = 0; } 상수 유틸리티 클래스 - 이걸 사용하자 public class Constants { private Constants() {} //인스턴스화 방지 static final int MAX = 9; static final int MIN = 0; }
-
아이템 15) 클래스와 멤버의 접근 권한을 최소화하라 (p96-101)책/이펙티브 자바 3e 2022. 3. 1. 19:00
아이템15) 클래스와 멤버의 접근 권한을 최소화하라 핵심 정리 프로그램 요소의 접근성은 가능한 최소한으로 꼭 필요한 것만 골라 최소한의 public API를 설계 public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져선 안됨 public static final 필드가 참조하는 객체가 불변인지 확인해라 정보은닉의 장점 시스템 개발 속도를 높임 시스템 관리 비용을 낮춤 정보 은닉 자체가 성능을 높이진 않지만, 성능 최적화에 도움을 줌 소프트웨어 재사용성을 높임 큰 시스템을 제작하는 난이도를 낮춤 -> 접근 제한자를 제대로 활용하는 것이 정보 은닉의 핵심 모든 클래스와 멤버의 접근성을 가능한 한 좁히자 클래스의 공개 api를 세심히 설계한 후, 그 외의 모..
-
item4) 인스턴스화를 막으려거든 private 생성자를 사용하라책/이펙티브 자바 3e 2022. 2. 24. 00:04
정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있음 이럴땐 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있음 //기본 생성자가 만들어지는 것을 막음(인스턴스화 방지용) private CLASS_NAME() { throw new AssertionError(); } 혹시 클래스 내부에서 생성자가 호출 될 수 있으니 Assertion Error를 던지는 것도 좋은 방법 생성자가 존재하는데 호출할 순 없는것이 직관적이지 않으니 주석을 다는게 좋음