🧷 1장 | 들어가기
이 책은 자바 언어와 그 기반 라이브러리, java.lang
, java.util
, java.io
, java.util.concurrent
, java.util.function
같은 하위 패키지를 효과적으로 사용하게끔 구성되어 있다.
총 90개의 아이템이 담겨있고, 각 아이템이 하나의 규칙을 다루며, 각 규칙은 업계 최고의 베테랑 프로그래머들이 유익하다고 인정하는 관례다. 이 아이템들이 주제별로 11개 장으로 묶여있고, 각 장은 넓은 관점에서 설계의 한 측면을 다룬다.
💎 기본 원칙
이 책의 규칙 대부분은 아주 핵심적인 기본 원칙 몇 개에서 파생된다.
바로 명료성(clarity)과 단순성(simplicity)이다. 이 두 가지는 무엇보다 중요하다.
- 컴포넌트는 정해진 동작이나 예측할 수 있는 동작만 수행해야 한다.
- 컴포넌트는 가능한 한 작되, 그렇다고 너무 작아서는 안 된다.
(컴포넌트: 개별 메서드부터 여러 패키지로 이뤄진 프레임워크까지 재사용 가능한 모든 SW 요소)
- 코드는 복사되는 게 아니라 재사용 되어야 한다.
- 컴포넌트 사이의 의존성은 최소로 유지해야 한다.
- 오류는 만들어지자마자 가능한 한 빨리 잡아야 한다.
💎 언어 명세
- 애너테이션 (annotation): 인터페이스의 일종
- 열거 타입 (enum): 클래스의 일종
- 클래스의 멤버: 필드 (field), 메서드 (method), 멤버 클래스, 멤버 인터페이스
- 메서드 시그니처: 메서드 이름 + 입력 매개변수의 타입 (반환 값의 타입은 포함 X)
- 상속 (inheritance) = 서브클래싱 (subclassing)
→ 클래스가 인터페이스를 구현한다 (implement)
→ 인터페이스가 다른 인터페이스를 확장한다 (extend)
- API (Application Programming Interface): 프로그래머가 클래스, 인터페이스, 패키지를 통해 접근할 수 있는 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태
(직렬화: 객체에 저장된 data를 스트림에 쓰기 위해 연속적인 데이터 = 바이트 스트림으로 변환하는 것)
- 클라이언트: API를 사용하는 클래스(코드)
- 사용자: API를 사용하는 프로그램 작성자(user)