>  기사  >  Java  >  코드 냄새 - 컬렉션 앨리어싱

코드 냄새 - 컬렉션 앨리어싱

WBOY
WBOY원래의
2024-08-30 06:01:02988검색

컬렉션을 노출하면 솔루션이 연결됩니다

TL;DR: 의도하지 않은 부작용을 방지하려면 불변 컬렉션을 사용하세요.

문제

  • 예측할 수 없는 행동
  • 디버깅 문제
  • 데이터 손상
  • 경악을 최소화하는 원칙 위반
  • 성급한 최적화
  • 예기치 못한 돌연변이
  • 동시성 문제
  • 스레드 안전성 저하
  • 커플링 증가

솔루션

  1. 불변 컬렉션 사용
  2. 불변 클래스 만들기
  3. 수정하기 전에 컬렉션을 복사하세요
  4. 컬렉션 게터 피하기
  5. 자동 속성 방지
  6. 선호정보 숨기기 및 캡슐화

문맥

앨리어싱은 두 개 이상의 변수가 동일한 개체를 참조할 때 발생합니다.

특히 하나의 변수가 공유 객체를 수정하는 경우 예상치 못한 부작용이 발생할 수 있습니다.

우발적인 앨리어싱을 방지하는 데 도움이 되는 컬렉션을 만든 후에는 변경할 수 없는 컬렉션을 변경할 수 없습니다.

미숙한 최적화자들은 컬렉션 복사는 비용이 많이 드는 작업이므로 피해야 한다고 주장합니다.

이것은 객체 앨리어싱의 특별한 경우입니다

샘플 코드

잘못된

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 코드 생성기는 특히 변경 가능한 컬렉션으로 작업할 때 기본적으로 항상 변경 불가능한 객체를 생성하지 않을 수 있습니다.

변경 불가능한 컬렉션의 우선순위를 지정하고 앨리어싱을 방지하기 위해 기존 컬렉션을 래핑하라는 메시지를 표시할 수 있습니다.

AI 탐지

AI 도구는 코드에서 잠재적인 앨리어싱 문제를 분석하고 대신 변경할 수 없는 컬렉션 사용을 제안할 수 있습니다.

결론

불변 컬렉션을 사용하면 의도하지 않은 부작용을 피할 수 있습니다.

이렇게 하면 코드를 더 예측하기 쉽고 추론하기가 더 쉬워집니다.

처지

추가 정보

부인 성명

코드 냄새는 제 생각입니다.

크레딧

사진: Martino Pietropoli, Unsplash


객체가 불변인 경우 한 가지 상태에만 있을 수 있으므로 큰 승리를 거둘 수 있습니다.

조슈아 블로흐


이 글은 CodeSmell 시리즈의 일부입니다.

위 내용은 코드 냄새 - 컬렉션 앨리어싱의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.