컬렉션을 노출하면 솔루션이 연결됩니다
TL;DR: 의도하지 않은 부작용을 방지하려면 불변 컬렉션을 사용하세요.
앨리어싱은 두 개 이상의 변수가 동일한 개체를 참조할 때 발생합니다.
특히 하나의 변수가 공유 객체를 수정하는 경우 예상치 못한 부작용이 발생할 수 있습니다.
우발적인 앨리어싱을 방지하는 데 도움이 되는 컬렉션을 만든 후에는 변경할 수 없는 컬렉션을 변경할 수 없습니다.
미숙한 최적화자들은 컬렉션 복사는 비용이 많이 드는 작업이므로 피해야 한다고 주장합니다.
이것은 객체 앨리어싱의 특별한 경우입니다
public class MutableExample { public static void main(String[] args) { List<Integer> numbers = List.of(1, 2, 3); List<Integer> otherNumbers = numbers; // Aliasing otherNumbers.add(4); System.out.println(numbers); // Output: [1, 2, 3, 4] } }
public class ImmutableExample { public static void main(String[] args) { List<Integer> numbers = List.of(1, 2, 3); List<Integer> otherNumbers = List.copyOf(numbers); // Creating a copy otherNumbers.add(4); System.out.println(numbers); // Output: [1, 2, 3] } }
[X] 반자동
여러 정적 분석 도구를 사용하면 앨리어싱 남용을 경고할 수 있습니다.
[x] 중급
AI 코드 생성기는 특히 변경 가능한 컬렉션으로 작업할 때 기본적으로 항상 변경 불가능한 객체를 생성하지 않을 수 있습니다.
변경 불가능한 컬렉션의 우선순위를 지정하고 앨리어싱을 방지하기 위해 기존 컬렉션을 래핑하라는 메시지를 표시할 수 있습니다.
AI 도구는 코드에서 잠재적인 앨리어싱 문제를 분석하고 대신 변경할 수 없는 컬렉션 사용을 제안할 수 있습니다.
불변 컬렉션을 사용하면 의도하지 않은 부작용을 피할 수 있습니다.
이렇게 하면 코드를 더 예측하기 쉽고 추론하기가 더 쉬워집니다.
코드 냄새는 제 생각입니다.
사진: Martino Pietropoli, Unsplash
객체가 불변인 경우 한 가지 상태에만 있을 수 있으므로 큰 승리를 거둘 수 있습니다.
조슈아 블로흐
이 글은 CodeSmell 시리즈의 일부입니다.
위 내용은 코드 냄새 - 컬렉션 앨리어싱의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!