Effective Java

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 아이템 18에서 상속을 염두하지 않고 설계한 '외부' 클래스를 상속할 때에 대한 주의점을 알아보았다. 여기서 '외부'란, 프로그래머의 통제권 밖에 있어서 언제 어떻게 변경될지 모른다는 뜻. 상속을 고려한 설계와 문서화 * 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다. 클래스의 API로 공개된 메서드에서 클래스 자신의 또 다른 메서드를 호출할 수도 있다. 그런데 마침 호출되는 메서드가 재정의 가능 메서드인 경우 그 사실을 호출하는 메서드의 API 설명에 기입해야 한다. 어떤 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 18. 상속보다는 컴포지션을 사용하라 상속은 코드를 재사용하는 강력한 수단이지만, 유의해서 사용하는 것이 좋다. 다른 패키지의 구체클래스를 상속하는 일은 위험하다. 여기서의 '상속'은 클래스가 다른 클래스를 확장하는 구현 상속을 말한다. (클래스가 인터페이스를 구현하거나, 인터페이스가 다른 인터페이스를 구현해서 확장하는 상속과는 무관함) 상속 시, 유의해야할 점 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있음. ex 1) 잘못된 상속 사용의 예 public class InstrumentedHashSet extends HashS..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 17. 변경 가능성을 최소화하라 불변 클래스 인스턴스의 내부 값을 수정할 수 없는 클래스. 즉, 불변 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 변하지 않는다. ex) String, 기본 타입의 박싱 클래스, BigInteger, BigDecimal 등 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전함 불변 클래스 생성 규칙 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 하위 클래스에서 부주의하게 혹은 나쁜 의도로 객체의 상태를 변하게 만드는 사태를 막아준다. 상속을 막는 대표적인 방법은 클래스를 f..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 public 클래스의 경우 내부 데이터 필드에 접근 제한자를 private으로 정의하고, public 접근자를 추가하는 것이 좋다. public class Point { private double x; private double y; public Point(final double x, final double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(final double x) { this.x = x; } public d..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트는 접근 권한을 잘 설정했는 지에 따라 달라진다. 정보은닉 정보 은닉의 장점은 많지만 그 중 대부분은 시스템을 구성하는 컴포넌트들을 서로 독립시켜서 개발, 테스트, 최적화, 적용, 분석, 수정을 개별적으로 할 수 있게 해주는 것과 연관이 있다. 장점 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담도 적기 때문이다. 정보 은닉 자체가 성능을 높여 주지는 않지만, 성능 최적화에 도움을 준다. 소프트웨어 재사..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 14. Comparable을 구현할지 고려하라 Comparable Interface & compareTo Method public interface Comparable { int compareTo(T t); } compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하다. Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻한다. ex) Comparable을 구현한 객체들의 배열은 쉽게 정렬 가능하다. Arrays.sort(a); 검색, 극단값 계산, 자동 정렬되는 컬렉션 관리도 역시 쉽게 가능하다. 자바 플랫폼 라이브러리의 모든 값 클래스와 열..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 13. clone 재정의는 주의해서 진행하라 - Cloneable Interface 메서드가 하나도 없는 특이한 인터페이스이며, 이런식으로 인터페이스를 구현하면 안된다. clone() 을 사용하기 위해서 구현해야하는 인터페이스. clone() 메서드는 Cloneable 인터페이스 안에 없고 Object에 있으며, protected로 정의되어있다. Cloneable을 구현한 클래스의 인스턴스에서 clone() 메서드를 호출하면 그 객체의 필드들을 하나하나 복사한 객체를 반환하며, 구현하지 않은 클래스의 인스턴스에서 clone() 메서드를 호출 시 CloneNotSupportedException을 예외를 발생..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 12. toString을 항상 재정의하라 Object의 기본 toString메서드는 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없고, PhoneNumber@abdbd처럼 단순히 클래스_이름@16진수로 표시한_해시코드를 반환한다. toString 1. toString은 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야한다. 2. toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라"고 한다. 3. toString을 잘 구현한 클래스는 코딩의 질이 올라간다. 4. 실전에서 toString은 그 객체가 가진 주요 정보 모두를 반환하는 게 좋다. 5. 포맷 명시 여부와..
멍목
'Effective Java' 태그의 글 목록 (2 Page)