728x90
반응형

제네릭 3

[Effective Java] 아이템 32. 제네릭과 가변인수를 함께 쓸 때는 신중하라.

🎯 아이템 32. 제네릭과 가변인수를 함께 쓸 때는 신중하라. 가변인수 메서드와 제네릭은 자바 5 때 함께 추가되었으니 서로 잘 어우러지리라 기대하겠지만, 슬프게도 그렇지 않다. 가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해주는데, 구현 방식에 허점이 있다. 제네릭과 가변인수를 혼용하면 타입 안정성이 깨진다! static void dangerous(List... stringLists) { List intList = List.of(42); Object[] objects = stringLists; objects[0] = intList; // 힙 오염 발생 String s = stringLists[0].get(0); // ClassCastException } 위 처럼 타입 안전성이 ..

Java 2023.03.21

[Effective Java] 아이템 30. 이왕이면 제네릭 메서드로 만들라.

🎯 아이템 30. 이왕이면 제네릭 메서드로 만들라. 제네릭 타입과 마찬가지로, 클라이언트에서 입력 매개변수와 반환값을 명시적으로 형변환해야 하는 메서드보다 제네릭 메서드가 더 안전하며 사용하기도 쉽다. 로 타입 사용 - 수용 불가! public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } 컴파일은 되지만 Raw use of parameterized class 'Set', Unchecked call to 'addAll(Collection

Java 2023.03.21

[Effective Java] 아이템 29. 이왕이면 제네릭 타입으로 만들라.

🎯 아이템 29. 이왕이면 제네릭 타입으로 만들라. 새로운 타입을 설계할 때는 형변환 없이도 사용할 수 있도록하라. 그렇게 하려면 제네릭 타입으로 만들어야 할 경우가 많다. 기존 타입 중 제네릭이었어야 하는 게 있다면 제네릭 타입으로 변경하자. 기존 클라이언트에는 아무 영향을 주지 않으면서, 새로운 사용자를 훨씬 편하게 해주는 길이다. Object 기반 스택 - 제네릭이 절실한 강력 후보!⭐ 지금 상태에서는 클라이언트가 스택에서 꺼낸 객체를 형변환해야 하는데, 이때 런타임 오류가 날 위험이 있다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACI..

Java 2023.03.21
728x90
반응형