본문 바로가기
자바

반성이란 무엇이며 왜 유용합니까?

by º기록 2021. 4. 13.
반응형

반성이란 무엇이며 왜 유용합니까?

나는 특히 Java에 관심이 있지만, 원칙은 어떤 언어로든 동일하다고 가정합니다.

 

해결 방법

 

이름 반영은 동일한 시스템 (또는 그 자체)에서 다른 코드를 검사 할 수있는 코드를 설명하는 데 사용됩니다.

예를 들어 Java에서 알 수없는 유형의 객체가 있고 'DoSomething'메소드를 호출하고자합니다.Java의 정적 타이핑 시스템은 객체가 알려진 인터페이스를 준수하지 않지만 리플렉션 사용을 사용하지 않으면 코드가 개체를보고 'DoSomething'이라는 메소드가 있는지 알아 내고 전화를 걸 수 있습니다.고 싶어요.

따라서 Java 에서이 코드 예제를 제공하기 위해 (문제의 객체가 Foo 인 것을 상상해보십시오) :

Method method = foo.getClass().getMethod("doSomething", null);
method.invoke(foo, null);

Java의 매우 일반적인 사용 사례는 주석이있는 사용법입니다.예를 들어 JUnit 4는 반영을 사용하여 @test 주석으로 태그가 지정된 메소드에 대해 클래스를 살펴보고 단위 테스트를 실행할 때 호출됩니다.


그리고 마지막으로, 예, 개념은 반영 (예 : C #)을 지원하는 다른 정적으로 입력 된 언어에서 매우 유사합니다.동적으로 입력 된 언어에서는 위에서 설명한 유스 케이스가 필요하지 않지만 런타임이없는 경우 런타임에 어떤 메소드를 호출 할 수 없으므로 런타임이 발생하지 않거나 표시되지 않거나특정 방식으로 일하는 것은 여전히 공통적입니다.

댓글에서 업데이트 :

시스템에서 코드를 검사하고 객체 유형을 참조하는 기능은 not reflection, but rather Type Introspection. Reflection is then the ability to make modifications at runtime by making use of introspection. The distinction is necessary here as some languages support introspection, but do not support reflection. One such example C ++입니다

 

참조 페이지 https://stackoverflow.com/questions/37628

 

 

반응형

댓글