# ch1 들어가기
# 밀도 있게 다룬 새로운 기능들
기능 | 도입된 자바 버전 |
---|---|
람다 | 자바 8 |
스트림 | 자바 8 |
옵셔널 | 자바 8 |
인터페이스의 디폴트 메서드 | 자바 8 |
try-with-resources | 자바 7 |
@SafeVarargs | 자바 7 |
모듈 | 자바 9 |
# 핵심 기본 원칙과 모범사례
명료성과 단순성
- 컴포넌트는 사용자를 놀라게 하는 동작을 해서는 절대 안된다.
- 정해진 동작이나 예측할 수 있는 동작만 수행해야 한다.
- 컴포넌트는 가능한 작되, 그렇다고 너무 작아서는 안된다
- 이 책에서 컴포넌트란, 개별 메서드부터 여러 패키지로 이뤄진 복합한 프레임워크까지 재사용 가능한 모든 소프트웨어 요소를 의미함
- 코드는 복사되는 것이 아니라 재사용 되어야 한다.
- 컴포넌트 사이의 의존성은 최소로 유지해야 한다.
- 오류는 만들어지자마자 가능한 한 빨리(되도록 컴파일 타임에) 잡아야 한다.
# 책에서의 목표
성능보다는 프로그램의 명확함, 유용함, 견고함, 유연함, 유지보수 에 집중한다. 이러한 목표를 만족하는 코드를 작성했다면 대부분의 상황에선 원하는 성능에 도달하기 어렵지 않을 것임
# 예제코드
# 기술 용어
대부분 자바 8용 언어 명세를 따름
# 타입 type 자료형
4가지가 존재함.
# 참조타입
- 인터페이스 interface
annotation 은 인터페이스의 일종
- 클래스 class
enum(열거타입) 은 클래스의 일종
- 배열 array
클래스의 인스턴스와 배열은 객체(Object) 이다.
# 값 타입
- 기본타입 primitive
Object 가 아니다.
# 클래스의 멤버
- 필드 field
- 메서드 method
- 멤버 클래스
- 멤버 인터페이스
# 메서드 시그니처
컴파일러가 메서드들을 구분하는 기준
- 메서드 이름 + 입력 매개변수들의 타입들
- 반환값의 타입은 시그니처에 포함되지 않는다.
# 자바 명세를 따르지 않는 용어
상속 inheritance
→ 서브클래싱subclassing
인터페이스 상속
→ 클래스가 인터페이스를 구현한다implement
→ 인터페이스가 다른 인터페이스를 확장한다extend
패키지 접근 package access (아무것도 명시하지 않은 접근 수준 access level)
→ 패키지-프라이빗package-private
# 자바 명세가 정의하지 않는 용어
공개 API exported API (shorted API)
- 프로그래머가 (1) 클래스, 인터페이스, 패키지를 통해 접근할 수 있는 모든 (2) 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태 를 의미함.
(1) 이 (2) 를 포함하는 상황에서, (1) 을 통해 (2) 로 접근할 수 있음을 의미함
- 모든 클라이언트가 접근가능
- API 작성자가 지원하기로 약속한 API 요소들
API 의 사용자
user
→ API 를 사용하는 프로그램 작성자API 의 클라이언트
client
→ API 를 사용하는 클래스(코드)API 요소
API element
→ (2) 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태를 총칭패키지의 공개 API
- 그 패키지의 모든 public 클래스와, 인터페이스의 public 혹은 protected 멤버와 생성자로 구성됨
- 자바 9 의 모듈 시스템의 개념을 적용하면, 해당 라이브러리의 모듈 선언에서 공개할 패키지를 선택할 수 있다.
← with ITEM1 정적 팩터리 메서드 →