Reading (65) 썸네일형 리스트형 [Effective-Java] Item 17. 변경 가능성을 최소화하라 불변 클래스: 인스턴스 내부 값을 수정할 수 없는 클래스 불변 인스턴스에 간직된 정보는 고정되어 객체 파괴 순간까지 절대 달라지지 않는다. 불변 클래스는 가변 클래스보다 설계, 구현, 사용이 쉽고 오류가 생길 여지도 적으며 훨씬 안전하다. ex) String, BigInteger, BigDecimal, Wrapper Class 불변클래스 규칙 1. 객체의 상태를 변경하는 메소드를 제공하지 않는다. ex) setter 2. 클래스를 확장할 수 없게 한다. 즉, 하위 클래스에서 부주의하게, 혹은 나쁜 의도로 객체의 상태를 변하게 하는 사태를 막아준다. 3. 모든 필드를 final로 선언한다. 시스템이 강제하는 수단을 이용해 설계자의 의도를 명확히 드러내는 방법이다. 새로 생성한 인스턴스를 동기화 없이 다른 .. [Effective-Java] Item 16. public 클래스에서는 public 필드가 아닌 접근자 메소드를 사용하라 인스턴스 필드들을 모아놓는 일 외에는 아무 목적도 없는 클래스를 작성하더라도 필드에 public을 사용하지 말자. // 사용 X class Point { public double x; public double y; } // 사용 class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } } 이.. [Effective-Java] Item 15. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨 구현과 API를 깔끔히 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며, 서로의 내부 동작방식에 전혀 개의치 않는다. 즉, 정보 은닉(캡슐화)이 잘 되있다는 것이다. 정보은닉의 장점 여러 컴포넌트를 병렬로 개발할 수 있기 때문에 시스템 개발 속도를 높인다. 각 컴포넌트를 더 빨리 파악해 디버깅할 수 있고, 다른 컴포넌트로 교체 부담도 적기 때문에 시스템 관리 비용을 낮춘다. 완성된 시스템을 프로파일링해 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있기 때문에 정보 은닉 자체가 성능을 높여주진 않지만 성능 최적화에 도움을 준다. 외부에 거의 의존치 않고 독자적으로 동작할 수 있는 컴포넌트라면 그 .. [Effective-Java] Item 14. Comparable을 구현할지 고려하라 Comparable은 제네릭 타입을 가지는 인터페이스이며, compareTo 메소드를 가진다. Object의 equals와 다른 두 가지 성격을 가진다. compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며 제네릭하다. Comparable을 구현한 클래스의 인스턴스들이 자연적인 순서가 있음을 뜻한다. 따라서 Comparable을 구현한 객체들의 배열, 검색, 극단값 계산, 자동 정렬되는 컬렉션 관리를 쉽게할 수 있다. 알파벳, 숫자, 연대같이 순서가 명확한 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자. public interface Comparable { public int compareTo(T o); } compareTo 메소드의 일반 규약 이 객체와 주어진 객.. 이전 1 ··· 10 11 12 13 14 15 16 17 다음