- 이 책의 규칙 대부분은 아주 핵심적인 기본 원칙 몇 개에서 파생된다.
- 바로 명료성(clartiy)과 단순성(simplicity)이다.
- 컴포넌트는 사용자를 놀라게 하는 동작을 해서는 절대 안된다. (정해진 동작이나 예측할 수 있는 동작만 수행해야 한다.)
- 컴포넌트는 가능한 작되, 그렇다고 너무 작아서는 안 된다. (이 책에서 컴포넌트란 개별 메서드부터 여러 패키지로 이뤄진 복잡한 프레임워크까지 재사용 가능한 모든 소프트웨어 요소를 뜻한다.)
- 코드는 복사되는 게 아니라 재사용되어야 한다.
- 컴포넌트 사이의 의존성은 최소로 유지해야 한다.
- 오류는 만들어지자마자 가능한 한 빨리 (되도록 컴파일 타임에) 잡아야 한다.
- 이 규칙들을 맹종하진 말아야 하나, 어겨야 할 때는 합당한 이유가 있어야 한다.
- 대다수 규율과 마찬가지로, 프로그래밍 고수 경지에 오르려면 먼저 정석이 되는 규칙들을 배운 후, 언제 그 규칙을 깨도 되느냐를 익혀야 한다.
기술 용어
기술 용어는 대부분 자바 8용 언어 명세를 따르며, 주요 사항은 다음과 같다.
- 자바가 지원하는 타입(type: 자료형)은 인터페이스(interface), 클래스(class), 배열(array), 기본 타입(primitive)까지 총 네 가지다.
- 애너테이션(annotation)은 인터페이스의 일종이다.
- 열거 타입(enum)은 클래스의 일종이다.
- 네 가지 타입 중 처음 세 가지는 참조 타입(reference type)이라 한다. 즉, 클래스의 인스턴스와 배열은 객체(object)인 반면, 기본 타입 값을 그렇지 않다.
- 클래스의 멤버로는 필드(field), 메서드(method), 멤버 클래스, 멤버 인터페이스가 있다.
- 메서드 시그니처는 메서드 이름과 입력 매개변수(parameter)의 타입들로 이뤄진다(반환값의 타입은 시그니처에 포함되지 않는다.)
참고 애너테이션
코드에 메타데이터를 추가하는 방법입니다. 주석과 다르게 컴파일러에게 정보를 전달하거나 실행 시점에 특정 동작을 지정하는데 사용합니다.
'@' 기호를 사용하여 표시하며, 다음과 같은 기능을 수행합니다.
1. 코드 문서화 2. 컴파일러 경고 및 에러 제어 3. 런타임 동작 지정 4. 리플렉션을 위한 메타데이터 추출
ex) @Override, @Deprecated
단, 일부 용어는 자바 언어 명세와 다르게 사용한다.
- 상속(inheritance)을 서브클래싱(subclassing)과 동의어로 쓴다.
- 인터페이스 상속 대신 "클래스가 인터페이스를 구현한다(implement)" 혹은 "인터페이스가 다른 인터페이스를 확장한다(extend)"고 표현한다.
- 아무것도 명시하지 않은 접근 수준(access level)을 이야기할 때는 (기술적으로 정확한 이름인) 패키지 접근(package access) 대신 전통적인 패키지-프라이빗(package-private)을 쓴다.
또한, 자바 언어 명세가 정의하지 않은 기술 용어도 몇 개 사용하려 한다.
- 공개 API(exported API), 줄여서 API(application programming interface)는 프로그래머가 클래스, 인터페이스, 패키지를 통해 접근할 수 있는 모든 클래스, 인터페이스, 생성자, 멤버, 직렬화된 상태(serialized form)을 말한다. (언어 구성 요소 중 하나인 인터페이스와 헷갈리지 않게 하기 위해 흔히 쓰는 인터페이스 대신 API를 쓴다.)
- API를 사용하는 프로그램 작성자(사람)을 그 API의 사용자(user)라 하고, API를 사용하는 클래스(코드)는 그 API의 클라이언트(client)라 한다.
- 클래스, 인터페이스, 생성자, 멤버, 직렬화된 상태를 총칭해 API 요소(API element)라 한다.
출처
https://www.yes24.com/Product/Goods/65551284
'책 > effective java' 카테고리의 다른 글
[effective java] item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2023.07.24 |
---|---|
[effective java] item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2023.07.23 |
[effective java] item 3. 싱글톤임을 보장하기 위해 private 생성자 또는 열거 타입을 사용해라 (0) | 2023.07.17 |
[effective java] item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.07.17 |
[effective java] item 1. 생성자 대신 정적 팩토리 메서드를 고려하라 (0) | 2023.07.17 |