[이펙티브 자바]
2020. 8. 8. 14:14ㆍ기술 서적/Effective Java 3∕E
Effective Java 3/E
회사 선배에게 추천을 받아 이펙티브 자바 3판 공부를 시작하게 되었다.
난이도가 높아 이해하기 어려울 수 있다고 하셔서 다른 분들이 올린 강의와 요약 내용을 참조하려한다.
또한 입사 후 자바스크립트 위주로 개발을 해서 자바 개념을 거의 잊어버린 상태라,
개념들도 다시 정리할 겸 블로그에 올리면서 공부하려고 한다.
1장. 들어가기
자바 새로운 기능과 해당 기능이 도입된 자바 버전
기능 | 도입된 자바 버전 |
람다 | 자바 8 |
스트림 | 자바 8 |
옵셔널 | 자바 8 |
인터페이스의 디폴트 메서드 | 자바 8 |
try-with-resources | 자바 7 |
@SafeVarargs | 자바 7 |
모듈 | 자바 9 |
프로그래밍 기본 원칙
명료성(Clarity)과 단순성(Simplicity)
- 컴포넌트는 사용자를 놀라게 하는 동작을 해서는 절대 안된다.
(정해진 동작이나 예측할 수 있는 동작만 수행해야 한다.) - 컴포넌트는 가능한 한 작되, 그럭다고 너무 작아서는 안된다.
(컴포넌트란 개별 메서드부터 여러 패키지로 이뤄진 복잡한 프레임워크까지 / 재사용 가능한 모든 소프트웨어 요소를 뜻함) - 코드는 복사되는게 아니라 재사용되어야 한다.
- 컴포넌트 사이의 의존성은 최소로 유지해아 한다.
- 오류는 만들어지자마자 가능한 한 빨리 (되도록 컴파일타임에) 잡아야 한다.
자바가 지원하는 타입
타입 (type; 자료형) | |
참조 타입 (reference type) |
인터페이스 (interface) |
클래스 (class) | |
배열 (array) | |
기본 타입 (primitive) |
참조 타입
- 기본 타입을 제외한 모든 타입
String str = new String("hello word")
- str이라는 변수 앞에 기본 타입이 아닌 String 클래스가 써있다.
new
라는 키워드는 객체를 메모리에 올려준다. 메모리에 올라간 객체를 인스턴스라 한다.new
뒤에 오는String(...)
는 생성자이다.- str 변수가 인스턴스를 가지고 있는 게 아니라 말 그대로 가리킨다. (= 참조한다, 레퍼런스한다)
- str 변수에는 "hello word" 문자열이 아니라, 문자열이 올라간 메모리의 위치 값 (인스턴스의 주소 값)이 저장된다.
인터페이스
- 애너테이션(annotation)도 인터페이스의 일종이다.
클래스
- 클래스의 멤버로는 필드(field), 메서드(method), 멤버 클래스, 멤버 인터페이스가 있다.
- 열거 타입(enum)도 클래스의 일종이다.
- 메서드 시그니처는 메서드 이름, 입력 매개변수parameter)의 타입들로 이뤄진다.
- 반환값의 타입은 메서드 시그니처에 포함되지 않는다.
API(application programming interface)
- 프로그래머가 / 클래스, 인터페이스, 패키지를 통해 / 접근할 수 있는 /
모든 API 요소 (API element: 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태(serialized form)) - 사용자(user): API를 사용하는 프로그램 작성자(사람)
- 클라이언트(client): API를 사용하는 클래스(코드)
- 공개 API는 그 API를 정의한 패키지의 밖에서 접근할 수 있는 API 요소로 이뤄진다.
공개 API는 모든 클라이언트가 접근할 수 있고, API 작성자가 지원하기로 약속한 API 요소들이다. - 패키지의 공개 API는 그 패키지의 /
모든 public 클래스와 / 인터페이스의 / public 혹은 protected 멤버와 / 생성자로 구성된다. - 자바 9의 모듈 시스템
자바 라이브러리에 모듈 개념을 적용하면 /
공개 API는 / 해당 라이브러리의 / 모듈 선언(module declaration)에서 공개하겠다고 한 패키지들의 /
공개 API만으로 이뤄진다.
즉, 공개할 패키지를 선택할 수 있다.
'기술 서적 > Effective Java 3∕E' 카테고리의 다른 글
[이펙티브 자바] item 3 - private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2020.08.29 |
---|---|
[이펙티브 자바] item 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2020.08.10 |
[이펙티브 자바] item 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2020.08.08 |