반응형
아이템 29 : 이왕이면 제네릭 타입으로 만들라
일반 클래스를 제네릭 클래스로 만들 때 처음 해야할 것은 클래스 선언에 타입 매개 변수를 추가하는 일이다.
제네릭 배열 생성할 때 E와 같은 실체화 불가 타입으로는 배열을 만들 수 없다. 적절한 해결책은 두 가지다.
첫 번째는 제네릭 배열 생성을 금지하는 제약을 대놓고 우회하는 방법이다.
두 번째는 elements 필드의 타입을 E[]에서 Object[]로 바꾸는 것이다.
첫 번째 방법은 가독성이 더좋다. 코드도 더 짧다. 보통의 제네릭 클래스라면 코드 이곳저곳에서 이 배열을 자주 사용할 것이다. 첫 번째 방식에서는 형변환을 배열 생성 시 단 한 번만 해주면 되지만, 두 번째 방식에서는 배열에서 원소를 읽을 때마다 해줘야 한다. 따라서 현업에서는 첫 번째 방식을 더 선호하며 자주 사용한다. 하지만(E가 Object가 아닌 한) 배열의 런타임 타입이 컴파일타임 타입과 달라 힙 오염을 일으킨다. 힙 오염이 맘에 걸리는 프로그래머는 두 번째 방식을 고수하기도 한다.
핵심 정리
클라이언트에서 직접 형변환해야 하는 타입보다 제네릭 타입이 더 안전하고 쓰기 편하다. 그러니 새로운 타입을 설계할 때는 형변환 없이도 사용할 수 있도록 하라. 그렇게 하려면 제네릭 타입으로 만들어야 할 경우가 많다. 기존 타입 중 제네릭이었어야 하는 게 있다면 제네릭 타입으로 변경하자. 기존 클라이언트에는 아무 영향을 주지 않으면서, 새로운 사용자를 훨씬 편하게 해주는 길이다.
반응형
'언어 > JAVA' 카테고리의 다른 글
[Effective Java] 한정적 와일드카드를 사용해 API 유연성을 높이라 (0) | 2020.03.24 |
---|---|
[Effective Java] 이왕이면 제네릭 메서드로 만들라 (0) | 2020.03.23 |
[Effective Java] 배열보다는 리스트를 사용하라 (0) | 2020.03.22 |
[Effective Java] 비검사 경고를 제거하라 (0) | 2020.03.22 |
[Effective Java] 로 타입은 사용하지 말라 (0) | 2020.03.21 |