> Java > java지도 시간 > 항목 리플렉션보다 인터페이스를 선호합니다.

항목 리플렉션보다 인터페이스를 선호합니다.

Barbara Streisand
풀어 주다: 2024-10-25 07:51:02
원래의
664명이 탐색했습니다.

Java에서의 리플렉션(java.lang.reflect):
성찰을 통해 다음이 가능합니다:

  • 임의 클래스의 생성자, 메서드 및 필드에 프로그래밍 방식으로 액세스합니다.
  • 반영적인 방식으로 클래스와 그 멤버(생성자, 메소드, 필드)를 조작하여 인스턴스를 생성하고 메소드를 호출하고 필드에 액세스할 수 있습니다.
  • 컴파일 중에 클래스가 존재하지 않더라도 객체에 대한 메서드를 호출합니다.

반영의 단점:
컴파일 타임 유형 검사 손실:

  • 일반적으로 컴파일 시 감지되는 오류는 런타임에만 나타납니다.
  • 예: 존재하지 않거나 액세스할 수 없는 메소드를 재귀적으로 호출하면 런타임 시 예외가 발생할 수 있습니다.

무겁고 장황한 코드:
리플렉션에는 더 복잡하고 읽기 어려운 코드가 필요합니다.
예:

Method method = obj.getClass().getMethod("methodName");
method.invoke(obj, args);

로그인 후 복사

저조한 성과:

  • 반사 메서드 호출은 일반 호출보다 상당히 느립니다.
  • 예: 특정 시나리오에서는 리플렉션이 직접 메서드 호출보다 최대 11배 느릴 수 있습니다.

성찰의 응용:

  • 코드 분석 도구, 종속성 주입 프레임워크 및 서비스 제공자 프레임워크에 사용됩니다.
  • 이러한 상황에서도 단점이 있으므로 가급적 피하는 것이 좋습니다.

반사 사용 제한:
제안 기술: 리플렉션을 사용하여 컴파일 시 알 수 없는 클래스를 인스턴스화하고 알려진 인터페이스 또는 슈퍼클래스를 통해 이러한 인스턴스를 참조하세요.

예:
명령줄로 지정되는 Set 인스턴스를 생성하는 프로그램:

Class<? extends Set<String>> cl = (Class<? extends Set<String>>) Class.forName(args[0]);
Constructor<? extends Set<String>> cons = cl.getDeclaredConstructor();
Set<String> s = cons.newInstance();
for (int i = 1; i < args.length; i++) {
    s.add(args[i]);
}
System.out.println(s);

로그인 후 복사

예에 표시된 단점:
런타임 예외:

  • 이 예에서는 런타임에 최대 6개의 서로 다른 예외를 생성할 수 있습니다.
  • 리플렉션을 사용하지 않으면 컴파일 타임에 이러한 예외가 포착됩니다.

복잡성과 장황함:

  • 이 예에서는 이름에서 클래스를 인스턴스화하는 데 25줄의 코드가 필요한 반면 직접 생성자 호출은 단 한 줄로 완료됩니다.

확인되지 않은 캐스트 경고:

  • 예제에는 명령줄에 지정된 클래스가 Set의 구현이 아닐 수 있으므로 확인되지 않은 캐스트에 대한 정당한 경고가 있습니다.

적절한 반사 사용:

  • 동적 종속성: 클래스, 메서드 또는 필드가 런타임에 존재하지 않을 수 있는 경우
  • 예: 리플렉션을 사용하면 이전 버전과의 호환성을 유지하면서 여러 버전의 패키지를 지원할 수 있습니다.

결론:
반사는 강력하지만 단점도 많습니다.
가능하다면 리플렉션을 사용하여 객체를 인스턴스화하고 컴파일 타임에 알려진 인터페이스나 슈퍼클래스를 통해 객체에 액세스하세요.

책의 예:
Item  Dê preferência às interfaces em vez da reflexão

위 내용은 항목 리플렉션보다 인터페이스를 선호합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿