본문 바로가기

전체 글187

아이템 20. 추상클래스보다 인터페이스를 우선하라 1. 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있고 기존 클래스도 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다. import java.time.DateTimeException; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int year); void setDateAndTime(int day, int month, int year, int hour, int minute, int seco.. 2023. 2. 5.
아이템 18. 상속보다는 컴포지션을 사용하라 1. 패키지 경계를 넘어 다른 패키지의 구체 클래스를 상속하는 일은 위험하다. 다른 패키지의 구체 클래스를 상속하는 경우 public class InstrumentedHashSet extends HashSet { // 추가된 원소의 수 private int addCount = 0; public InstrumentedHashSet() { } public InstrumentedHashSet(int initCap, float loadFactor) { super(initCap, loadFactor); } @Override public boolean add(E e) { addCount++; return super.add(e); } @Override public boolean addAll(Collection c) .. 2023. 2. 5.
아이템 17. 변경 가능성을 최소화 하라 1. 불변 클래스 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전한다. 불변 클래스를 만드는 다섯가지 규칙 1. 객체의 상태를 변경하는 메서드를 제공하지 않는다. public class PhoneNumber { private short areaCode, prefix, lineNum; public PhoneNumber(short areaCode, short prefix, short lineNum) { this.areaCode = areaCode; this.prefix = prefix; this.lineNum = lineNum; } public short getAreaCode() { return areaCode; } public short getPrefi.. 2023. 2. 5.
아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 데이터 필드 접근방식 public class Point { public double x; public double y; } 이렇게 데이터 필드를 직접 접근하게되면 여러가지 문제점이 있습니다. 클라이언트 코드가 필드를 직접 사용하면 캡슐화의 장점을 제공하지 못한다. 필드를 변경하려면 API를 변경해야한다. 필드에 접근할 때 부수 작업을 할 수 없다. 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화 public class Point { private double x; pirvate double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double.. 2023. 2. 5.