서론

java에서 리플렉션을 사용하면서, C++에서는 왜 해당기능이 없었는지 분명 일부로 안만든건 아닐텐대.. JAVA는 어째서 리플렉션이 가능한지 궁금하여 찾아보았습니다.

java의 태생

Java는 이식 가능하고 플랫폼 독립적으로 설계된 프로그래밍 언어입니다. 즉, 기본 하드웨어나 운영 체제에 관계없이 JVM(Java Virtual Machine)이 설치된 모든 시스템에서 Java 코드를 실행할 수 있습니다. 이러한 이식성과 플랫폼 독립성을 달성하기 위해 Java는 정적 및 동적 기능의 조합을 사용합니다.

리플렉션이란?

Java의 동적 기능 중 하나는 리플렉션입니다. 리플렉션은 프로그램이 런타임에 자체적으로 검사하고 수정할 수 있도록 하는 메커니즘입니다. 이를 통해 Java 프로그램은 클래스 정의, 메소드 및 필드를 포함하여 자체 구조를 검사할 수 있습니다. 또한 프로그램이 컴파일 시간에 유형이나 이름을 몰라도 객체를 조작하고 메서드를 동적으로 호출할 수 있습니다.

리플렉션이 가능한 이유

JVM은 로드된 클래스 및 개체에 대한 많은 메타데이터를 유지 관리하기 때문에 Java에서 리플렉션이 가능합니다. 이 메타데이터에는 클래스 계층 구조, 각 클래스의 필드와 메서드, 클래스 간의 관계에 대한 정보가 포함됩니다. Java 프로그램이 리플렉션을 사용하면 이 메타데이터에 액세스하여 런타임 시 프로그램 자체 구조를 검사하고 조작하는 데 사용할 수 있습니다.

예를 들어, 리플렉션을 사용하여 Java 프로그램은 클래스 이름, 포함된 메서드 및 필드, 구현하는 수퍼클래스 및 인터페이스를 결정할 수 있습니다. 또한 클래스의 새 인스턴스를 만들고 해당 필드의 값을 설정 및 가져오고 메서드를 호출할 수 있습니다. 이를 통해 Java 프로그램에서 상당한 유연성과 동적 동작이 가능합니다.

요약

요약하면 Java는 JVM이 로드된 클래스 및 개체에 대한 메타데이터를 유지 관리하기 때문에 리플렉션이 가능하며 이 메타데이터는 런타임 시 Java 프로그램에서 액세스하고 사용하여 프로그램 자체 구조를 검사하고 조작할 수 있습니다.