많은 클래스가 하나 이상의 자원에 의존한다. 가령, '맞춤법 검사기'는 '사전'에 의존하고 있다.위 두 방식은 모두 '사전을 단 하나만 사용한다'고 가정한다는 점에서 아쉬움이 있다. 사전 하나로 모든 쓰임에 대응하기에는 힘들 수 있기 때문!실전에서는 사전이 언어별로 따
📌 요약 > > - finalizer와 cleaner는 즉시 수행된다는 보장이 없으며, 실행되지 않을 수도 있다. > > - finalizer 동작 중에 예외가 발생하면 정리 작업이 처리되지 않을 수도 있다. > > - finalizer와 cleaner는 심각한 성능
아이템 10부터는 오브젝트의 메소드를 다룬다.모든 Class는 암묵적으로 Object를 상속받는다. 그 Object들의 메소드들을 오바라이딩으로 구현할 수 있는데, Finalize는 아이템 8에서 다루었으니 그 외의 메소드들을 살펴보겠다.필요하지 않은 경우 equals
앞의 아이템에서 살펴본 equals를 재정의할 때에는, hashCode도 반드시 같이 만들어줘야 한다. 심지어 Lombock에서는 @EqualsAndHashCode로 함께 만들어줘야 하기도 한다.equals 비교에 사용되는 정보가 변경되지 않았다면, hashCode는
Clonable 인터페이스 Cloneable은 어떤 객체가 복제(clone)을 허용한다는 사실을 알리기 위해서 만들어진 믹스인 인터페이스이다. 인터페이스 내부를 살펴보면 clone 메서드가 선언되어 있지 않고, Object 클래스에 clone 메서드가 protected
인터페이스 상속이 아닌 클래스가 다른 클래스를 확장하는 구현상속은 여러 문제점이 존재한다.상위 클래스의 내부 구현이 달라질 때마다 그 여파로 하위 클래스가 오동작할 수 있다.아래 코드는 HashSet을 상속했고, add와 addAll 메소드를 재정의 했다.3개의 원소를
Java 8 이전 : '현재의 인터페이스에 새로운 메서드가 추가될 일은 영원히 없다'인터페이스에 메서드를 추가할 경우, 기존의 구현체들에는 해당 메서드가 없기 때문에 컴파일 오류 발생Java 8 : 기존 인터페이스에 메서드를 새롭게 추가 가능기존 인터페이스에 메서드를
Top Level Class : 중첩되지 않은 클래스. 즉, 다른 클래스나 인터페이스 내부에 선언되지 않은 클래스 Nested Class : 중첩 클래스. 다른 클래스 안에 정의된 클래스 자신을 감싼 바깥 클래스에서만 쓰여야 하며, 그외의 쓰임새가 있다면 톱레벨
비검사 경고란? warning : [unchecked]를 말하며, casting 할 때 검사를 하지 않았다고 뜨는 경고이다. 제너릭을 사용하기 시작하면 수많은 컴파일러 경고가 나온다. 비검사 형변환 경고 비검사 메서드 호출 경고 비검사 매개변수화 가변인수 타입 경
JDK가 제공하는 제네릭 타입과 메서드를 사용하는 일은 일반적으로 쉬운 편이지만,제네릭 타입을 새로 만드는 일은 조금 더 어렵다. (그래도 배워두면 그만한 값어치는 충분히 한다.)아이템 7 - Stack class: Object 기반 스택 - 제네릭이 절실한 강력 후보
객체의 저장이라는 관점에서, 가장 쉽게 떠올릴 수 있는 것은 배열(Array)이다. 특히 원시(Primitive)타입의 값들을 저장하여 다룰 때 많이 사용한다. 하지만 배열은 동적 할당이 쉽지 않다는 제약이 존재한다.따라서 이러한 문제의 해결 방안으로, java.uti
: 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입ex) 사계절, 태양계의 행성, 카드게임의 카드 종류 등대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 모든 열거 타입은 해당 상수가 그 열거타입에서 몇 번째 위치인지를 반환하는
ordinal()을 배열 인덱스로 사용시 문제점 배열은 제네릭과 호환되지 않아 비검사 형변환을 수행해야 함 -> 깔끔하게 컴파일되지 않음 배열은 각 인덱스의 의미를 모르니 출력 결과에 직접 레이블을 달아야 함 정확한 정숫값을 사용한다는 것을 직접 프로그래머가 보증
: Java 8 이전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상 클래스)를 사용했는데, 이런 인터페이스의 인스턴스를 함수 객체라고 함특정 함수나 동작을 나타내는 데에 사용함JDK 1.1이 등장하면서 함수 객체를 만드는 주요
Java 8 이전과 이후 Java가 람다를 지원하면서, API 작성 모범 사례도 크게 바뀜 ex) 이전에는 템플릿 메서드 패턴이 매력적이었음(상위 클래스의 기본 메서드를 재정의해, 원하는 동작을 구현하는 것) → 현대적인 해법 : 같은 효과의 함수 객체를 받는
~ Java 7 : 여러 원소, 즉 일련의 원소를 반환해야 할 때 주로 Collection, Set, List 같은 컬렉션 인터페이스 / Iterable / 배열 을 사용했다.Collection : 기본Iterable : for-each문에서만 쓰이거나, 반환되는 원소
매개변수의 유효성 검사 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바람 제약사항은 반드시 문서화해야 함 메서드 몸체가 시작되기 전에 검사해야 함 "오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다"는 일반 원칙 📌 제약사항은 반드시
💬 한 줄 요약null을 반환하는 API는 사용하기 어렵고, 오류 처리 코드도 늘어난다. 성능이 더 좋은 것도 아니다.다음은 컬렉션이 비었다면 null을 반환하는 코드이다.위와 같은 코드에서 만약 null값을 반환하게 된다면, 클라이언트는 이 null 상황을 처리하는
API 문서 API를 쓸모 있게 하려면 문서를 잘 작성해야 함 사람이 직접 작성하려면 코드가 수정될 때마다 매번 함께 수정해줘야 함 Javadoc Javadoc(자바독): API 문서 수정 등을 사람 대신 해줄 수 있는 자바의 유틸리티 소스코드 파일에서 문서화 주석(