이 책에서 컴포넌트란, 개별 메서드부터 여러 패키지로 이뤄진 복잡한 프레임워크까지 재사용 가능한 모든 소프트웨어 요소를 뜻한다.컴포넌트는 가능한 한 작되, 그렇다고 너무 작아서는 안 된다. \-> 정해진 동작이나 예측할 수 있는 동작만 수행해야 한다. (명료성과 단순성
object는 객체를 만들 수 있는 구체 클래스.기본적으로 상속해서 사용하도록 설계되어 있다.Object 에서 final이 아닌 메서드 (equals, hashCode, toString, clone, finalize) 는 모두 재정의(overriding)를 염두에 두고
'상속': 클래스가 다른 클래스를확장하는 구현 상속상위 클래스는 릴리스마다 내부 구현이 달라질 수 있으며, 그 여파로 코드 한 줄 건드리지 않은 하위 클래스가 오동작 할 수 있다.\-> "메서드 호출과 달리 상속은 캡슐활르 깨뜨린다."상위 클래스에 새 메서드를 추가하는
필드들을 final로 선언하려면 해당 의미에 쓰이지 않는 필드들까지 생성자에서 초기화 해야 한다.(쓰지 않는 필드를 초기화하는 불필요한 코드가 늘어난다.)예를 들어,새로운 의미를 추가할 때마다 모든 switch 문을 찾아새 의미를 처리하는 코드를 추가해야 하는데,하나라
item29. 이왕이면 제네릭 타입으로 만들라 일반 클래스를 제네릭 클래스로 만드는 첫 단계. 클래스 선언에 타입 매개 변수를 추가하는 일. 스택이 담을 원소의 타입 하나만 추가하면 된다. -> 타입 이름으로는 보통 E를 사용 (아이템 68) -> Object를 적절
열거 타입은 일정 개수의 상수 값을 정의한 다음,그 외의 값은 허용하지 않는 타임ex) 사계절, 태양계의 행성, 카드게임의 카드 종류 등자바에서 열거 타입을 지원하기 전에는다음 코드처러 정수 상수를 한 묶음 선언해서 사용하곤 했다.정수 열거 패턴(int enum pat
열거 타입 상수는 자연스럽게 하나의 정숫값에 대응.모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지 반환하는 ordinal이라는 메서드 제공.동작은 하지만 유지보수하기가 끔찍한 코드.상수 선언 순서를 바꾸는 순간, 오동작값을 중간에 비워둘 수 없음—>
스트림데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소스트림과 컬렉션컬렉션 : 현재 자료구조가 포함하는 모든 값을 메모리에 저장하는 자료구조.\-> 컬렉션의 모든 요소는 컬렉션에 추가하기 전에 계산되어야 함.스트림 : 요청할 때만 요소를 계산하는 고정된 자료구
컬렉션이 비었으면 null을 반환한다. 따라 하지 말 것null 상황 처리하는 코드컬렉션이나 배열 같은 컨테이너가 비었을 때null을 반환하는 메서드를 사용할 때면 항시 이와 같은 방어 코드 넣어줘야 한다.클라이언트에서 방어 코드를 빼먹으면 오류 발생 가능성빈 컬렉션과
메서드가 특정 조건에서 값을 반환할 수 없ㅇ르 때 취할 수 있는 선택지1\. 예외를 던진다.2\. null을 반환한다.예외는 진짜 예외적인 상황에서만 사용해야 하며예외를 생성할 때 스택 추적 전체를 캡처하므로 비용도 만만치 않음null을 반환하면 이런 문제가 생기지 않