Home
게임과 개발사이
Cancel

Item 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라

태그 달린 클래스 태그 클래스란 두가지 이상의 의미를 표현할 때 그 중 현재 표현하는 의미를 태그값으로 알려주는 클래스 class Figure { enum Shape { RECTANGLE, CIRCLE } // 태그 필드 final Shape shape; // RECTANGLE 용 필드 ...

Item 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라

인터페이스는 타입을 정의하는 용도로만 사용해야한다. 상수 공개용 수단으로 사용하지 말자. 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 클래스가 어떤 인터페이스를 구현한다는건, 인스턴스로 무엇을 할 수 있는지를 클라이언트를 알려주는 행위 안티패턴 - 사용 금지 메서드 없이, 상수를 뜻하는 static final ...

Item 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라

인터페이스에서 새로운 메소드를 추가하면 기존의 구현체들에 영향이 가게 된다. 이러한 문제를 해결하여 새로운 메소드를 추가할 수 있도록 한 것이 자바 8 부터 등장한 default 메소드이다. default 메소드 public interface JavaStudyable { // ~able 네이밍 규칙을 가진다. public abstract voi...

Item 20 - 추상 클래스보다는 인터페이스를 우선하라

자바는 단일 상속만 지원하니, 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약을 안고 있다. 반면 인터페이스는 여러개를 구현(implement) 할 수 있으며 어떤 클래스를 상속했든 같은 타입으로 취급된다. 따라서 추상클래스 보다는 인터페이스를 우선으로 하여 구현하는것을 권장한다. 인터페이스의 장점 기존 클래스에도 손쉽게 새로운 인터페이스...

Item 19 - 변상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

상속을 염두에 두지 않은 외부 클래스(주: 프로그래머의 통제권 밖에 있어 변경 시점을 알 수 없는 클래스)를 상속할 경우 여러 문제가 발생할 수 있다. 상속을 고려한 설계와 문서화는 정확히 무얼 뜻할까? 1. 재정의 메서드 문서화 상속이 목적인 클래스를 설계한다면 기능 확장 및 재정의할 수 있는 메서드들이 내부적으로 어떻게 이용되는지 문서로 남겨...

Item 18 - 상속보다는 컴포지션을 사용하라

Item 18 :: 상속보다는 컴포지션을 사용하라 일반적인 구체 클래스를 패키지 경계를 넘어, 즉 다른 패키지의 구체 클래스를 상속하는 일은 위험하다. 이 책에서 말하는 상속이란 클래스가 다른 클래스를 확장하는 구현 상속을 말한다. 상속 관계의 여러 문제점 1. 메소드 호출과 달리 상속은 캡슐화를 깨뜨린다. 상위 클래스가 어떻게 구현되느냐에 따...

Item 17 - 변경 가능성을 최소화하라

필드만 정의된 것 외에는 아무 목적도 없는 클래스를 작성하는 경우가 있을 것이다 public class Point { public double x; public double y; } 클래스의 mutability(상태 변경 가능성)을 최소화하라(Minimize mutability) ex: 불변 복소수 클래스(Immutable complex nu...

Item 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

필드만 정의된 것 외에는 아무 목적도 없는 클래스를 작성하는 경우가 있을 것이다 public class Point { public double x; public double y; } 이런 클래스는 외부에서 필드로 직접 접근 할 수 있어 캡슐화의 이점을 제공하지 못한다 또한, 클라이언트 코드 수정 없이는 표현 방식을 바꿀 수도 없고 불변...

Item 15 - 클래스와 멤버의 접근 권한을 최소화하라

내부 구현을 외부 컴포넌트로부터 잘 숨겼다면 잘 설계된 컴포넌트라고 할 수 있다. 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않는 것이다 → 정보 은닉 혹은 캡슐화라는 개념으로 부른다. 정보 은닉은 다음과 같은 장점을 가진다. API를 통해서 다른 컴포넌트와 소통하기 때문에 API를 먼저 설계하고 ...

Item 14 - Comparable을 고려하라

알파벳, 숫자, 연대, 번호 등 순서가 있는 값 클래스를 작성하면 반드시 Comparable 를 구현하자. Comparable 인터페이스는 compareTo() 라는 하나의 메서드를 정의한다. 이 메서드는 Object 메서드가 아니다. 이 메서드의 성격은 Object의 equals와 유사하지만 아래와 같은 차이가 있음 ...