본문 바로가기

Java26

아이템 32. 제네릭과 가변인수를 함께 쓸 때는 신중하라 가변인수란 클라이언트의 입장에서 파라미터를 몇개 보낼지 선택할 수 있는 변수를 말합니다. 아래에 dangerous메서드의 인자에 ...이렇게 점이 세개가 있는데 이것을 가변인수를 받을수 있다는것을 의미합니다. 제네릭타입의 가변인수를 받는 dangerous메서드 package me.whiteship.chapter05.item32; import java.util.ArrayList; import java.util.List; // 제네릭 varargs 배열 매개변수에 값을 저장하는 것은 안전하지 않다. (191-192쪽) public class Dangerous { // 코드 32-1 제네릭과 varargs를 혼용하면 타입 안전성이 깨진다! (191-192쪽) static void dangerous(List.... 2023. 2. 5.
아이템 30. 이왕이면 제네릭 메서드로 만들라 매개변수화 타입을 받는 정적 유틸리티 메서드 제네릭 메서드를 사용하면 컴파일 타임에 타입안정성을 보장할 수 있습니다. 제네릭을 사용하지 않는 메서드 package me.whiteship.chapter05.item30._01_before; import java.util.HashSet; import java.util.Set; // 제네릭 union 메서드와 테스트 프로그램 (177쪽) public class Union { // 코드 30-2 제네릭 메서드 (177쪽) public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } } Union클래스에 union이라는 메소드가 있는.. 2023. 2. 5.
아이템 29. 이왕이면 제네릭 타입으로 만들라 어떤 클래스를 만들다 보면 클래스안에 어떤 다른 객체를 담는 역할을하는 클래스를 만들 수 있습니다. 예를 들어 스택이라는 자료구조안에 어떤 Element들을 쌓는경우가 생기는데 이런경우 보통 제네릭타입으로 만들면 유용합니다. 특히 Object타입으로 담고있다면 더더욱 명확하게 제네릭을 사용해서 더 구체적인 타입으로 코딩을 하도록 유도하면 런타임시에 ClassCastException을 많이 줄여줄 수 있습니다. Object를 이용한 제네릭 스택 package me.whiteship.chapter05.item29.object; import me.whiteship.chapter05.item29.EmptyStackException; import java.util.Arrays; import java.util.Li.. 2023. 2. 5.
아이템 28. 배열보다는 리스트를 사용하라 1. 배열은 공변(covariant), 제네릭은 불공변 package me.whiteship.chapter05.item28.erasure; import java.util.ArrayList; import java.util.List; public class IntegerToString { public static void main(String[] args) { // 공변 Object[] anything = new String[10]; anything[0] = 1; // 불공변 List names = new ArrayList(); List objects = names; } } anything배열을 보면 오른쪽 타입은 Object배열이고 왼쪽은 String타입입니다. Object와 String의 상속관계는 St.. 2023. 2. 5.