이펙티브 자바 5장: 모든 객체의 공통 메서드

Adam·2024년 7월 27일
0

이펙티브 자바

목록 보기
4/10
post-thumbnail

로 타입은 사용하지 말라

제네릭 타입: 클래스와 인터페이스 선언에 타입 매개변수가 쓰이는 클래스 혹은 인터페이스

로 타입을 선언했을 경우 런타임에 문제가 발생할 수 있다

로 타입을 쓰면 제네릭이 안겨주는 안전성과 표현력을 모두 잃게 된다

로 타입은 과거 코드와 호환성 때문에 있는 것

비검사 경고를 제거하라

제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 된다

경고를 제거할 수 없지만 타입 안전하다고 확신할 수 있다면 @SupressWarnings(”unchecked”)애너테이션을 달아 경고를 숨긴다

@SuppressWarning 애너테이션은 항상 가능한 좁은 범위에 적용해야 한다

@SupressWarnings(”unchecked”)애너테이션을 사용할 때면 그 경고를 무시해도 안전한 이유를 항상 주석으로 남겨야 한다

배열보다는 리스트를 사용하라

배열은 공변이고 실체화되는 반면, 제네릭은 불공변이고 타입 정보가 소거

배열은 런타임에는 안전하지만 컴파일 타임에는 그렇지 않고 제네릭은 그 반대

둘을 섞어 쓰다가 컴파일 오류나 경고를 만나면, 가장 먼저 배열을 리스트로 대체하는 방법을 적용

이왕이면 제네릭 타입으로 만들라

일반 클래스를 제네릭 클래스로 만드는 첫 단계는 클래스 선언에 타입 매개 변수를 추가하는 일

클라이언트에서 직접 형변환해야 하는 타입보다 제네릭 타입이 더 안전하고 쓰기 편하다

기존 타입 중 제네릭이 있어야 하는 게 있다면 제네릭 타입으로 변경하는 것이 좋다

이왕이면 제네릭 메서드로 만들라

클래스와 마찬가지로 메서드도 제네릭으로 만들 수 있다

제네릭 타입과 마찬가지로 클라이언트에서 입력 매개변수와 변환값을 명시적으로 형변환해야 하는 메서드보다 제네릭 메서드가 더 안전하며 사용하기 쉽다

형변환을 해줘야 하는 기존 메서드는 제네릭하게 만들자

한정적 와일드카드를 사용해 API 유연성을 높이라

유연성을 극대화하려면 원소의 생산자나 소비자용 입력 매개변수와 와일드카드 타입을 사용하라

제네릭과 가변인수를 함께 쓸 때는 신중하라

제네릭 배열 매개변수에 값을 저장하는 것은 안전하지 않다

@SafeVarags 애너테이션은 메서드 작성자가 그 메서드가 타입 안전함을 보장하는 장치

타입 안전 이종 컨테이너를 고려하라

컬랙션 API로 대표되는 일반적인 제네릭 형태에서는 한 컨테이너가 다룰 수 있는 타입 매개변수의 수가 고정

키를 타입 매개변수로 바꾸면 이런 제약이 없는 타입 안전 이종 컨테이너를 만들 수 있다

타입 안전 이종 컨테이너는 Class를 키로 쓰며, 이런 식으로 쓰이는 Class 객체를 타입 토큰이라 한다

profile
Keep going하는 개발자

0개의 댓글