728x90
반응형

가변인수 2

[Effective Java] 아이템 53. 가변인수는 신중히 사용하라.

🎯 아이템 53. 가변인수는 신중히 사용하라. 인수 개수가 일정하지 않은 메서드를 정의해야 한다면 가변인수가 반드시 필요하다. 메서드를 정의할 때 필수 매개변수는 가변인수 앞에 두고, 가변인수를 사용할 때는 성능 문제까지 고려하자. 인수가 1개 이상이어야 하는 가변인수 메서드 - 잘못 구현한 예! static int min(int... args) { if (args.length == 0) throw new IllegalArgumentException("인수가 1개 이상 필요합니다."); int min = args[0]; for (int i = 1; i < args.length; i++) if (args[i] < min) min = args[i]; return min; } 이 방식에는 문제가 몇 개 있다...

Java 2023.03.24

[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
728x90
반응형