이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 때로 두 가지 이상의 기능을 가지고 있으며, 그중 어떤 기능을 제공하는지 표시하는 태그(tag)가 달린 클래스를 만날 때가 있다. class Figure { enum Shape { RECTANGLE, CIRCLE }; // 어떤 모양인지 나타내는 태그 필드 final Shape shape; // 태그가 RECTANGLE일 때만 사용되는 필드 double length; double width; // 태그가 CIRCLE일 때만 사용되는 필드 double radius; // 원을 만드는 생성자 Figure(double radius) { shape = Sh..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형(type) 역할을 하게 된다. 그 외 다른 목적으로 인터페이스를 정의하고 사용하는 것은 적절치 못하다.이 기준에 미달하는 사례로 소위 상수 인터페이스(constant interface)라는 것이 있다. public interface ObjectStreamConstants { short STREAM_MAGIC = -21267; short STREAM_VERSION = 5; byte TC_BASE = 112; byte TC_NULL = 112; ....
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 자바 언어에는 여러 가지 구현을 허용하는 자료형을 만드는 방법이 두 가지 포함되어 있다. 인터페이스와 추상 클래스(abstract class)이다.인터페이스는 인터페이스가 규정하는 일반 규약(general contract)을 지키기만 하면되며, 그렇게 만든 클래스는 클래스 계층(class hierarchy)에 속할 필요가 없다.추상 클래스는 추상 클래스가 규정하는 자료형을 구현하기 위해서 반드시 계승을 해야 한다. 이에 따른 많은 제약이 발생하게 된다. 1. 이미 있는 클래스를 개조해서 새로운 인터페이스를 구현하도록 하는 것은 간단하다 필요한 메서드..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 규칙 16은 계승을 위한 설계와 문서를 갖추지 않은 “이질적(foreign)” 클래스의 하위 클래스를 만들 때 생기는 문제점을 설명하고 있다.2017/11/21 - [프로그래밍/Java] - [이펙티브 자바] 규칙16. 계승하는 대신 구성하라 재정의 가능 메서드를 내부적으로 어떻게 사용하지는지(self-use) 반드시 문서에 남겨야 한다. (재정의 가능하다는 것은 public 또는 protected로 선언된 비-final 메서드라는 뜻이다.) 관습적으로, 재정의 가능 메서드를 어떤 식으로 호출하는지는 메서드 주석문 마지막에 명시한다. 주석은 “이 구..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 계승은 코드 재사용을 돕는 강력한 도구지만, 항상 최선이라고는 할 수 없다. 계승은 상위 클래스와 하위 클래스 구현을 같은 프로그래머가 통제하는 단일 패키지 안에서 사용하면 안전하다. 계승을 고려해 설계되고 그에 맞는 문서를 갖춘 클래스에 사용하는 것도 안전하다(규칙 17). (이번 규칙에서 다루는 계승은 어떤 클래스가 다른 인터페이스를 ‘implements’ 하거나, 어떤 인터페이스가 다른 인터페이스를 ‘extends’하는 경우에는 적용되지 않는다.) 메서드 호출과 달리, 계승은 캡슐화(encapsulation) 원칙을 위반한다. 상위 클래스의 구..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 변경 불가능(immutable) 클래스는 그 객체를 수정할 수 없는 클래스다. 변경 불가능 클래스를 만들 때의 규칙 객체 상태를 변경하는 메서드(수정자 메서드 등)를 제공하지 않는다. 계승할 수 없도록 한다. 보통 클래스를 final로 선언하면 된다. 모든 필드를 final로 선언한다. 모든 필드를 private로 선언한다. 변경 가능 컴포넌트에 대해 독점적 접근권을 보장한다. 클래스에 포함된 변경가능 객체에 대한 참조를 클라이언트는 획득할 수 없어야 한다. 생성자나 접근자, readObject 메서드 안에서는 방어적 복사본(defensive cop..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 // 이런 저급한 클래스는 절대 누구에게 보여주지 말 것 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; }..
이펙티브 자바 Effective Java 2/E국내도서저자 : 조슈아 블로크(Joshua Bloch) / 이병준역출판 : 인사이트 2014.09.01상세보기 잘 설계된 모듈과 그렇지 못한 모듈을 구별 짓는 가장 중요한 속성 하나는 모듈 내부의 데이터를 비롯한 구현 세부사항을 다른 모듈에 잘 감추느냐의 여부다.잘 설계된 모듈은 구현 세부사항을 전부 API 뒤쪽에 감춘다. 정보은닉(information hiding) 또는 캡슐화(encapsulation)라는 용어로 알려져 있다.정보은닉은 시스템을 구성하는 모듈 사이의 의존성을 낮춘다(decouple). 1. 각 클래스와 멤버는 가능한 접근 불가능하도록 만들어야 한다 최상위 레벨 클래스나 인터페이스는 가능한 package-private로 선언 public으로..