관리 메뉴

웹개발자의 기지개

[Java] Class Literal - 클래스명.class 본문

Java

[Java] Class Literal - 클래스명.class

http://portfolio.wonpaper.net 2023. 7. 19. 11:10

 

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Person {
    private String name;
    private int age;
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public void introduce() {
        System.out.println("안녕하세요, 저는 " + name + "이고, " + age + "살입니다.");
    }
}
cs

Person.class를 사용하여 Person 클래스의 Class 객체를 얻고, 리플렉션을 사용하여 클래스의 인스턴스를 생성하고 메서드를 호출해보자.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.lang.reflect.*;
 
public class Main {
    public static void main(String[] args) throws Exception {
        // Person 클래스의 Class 객체 얻기
        Class<Person> personClass = Person.class;
 
        // 클래스의 인스턴스 생성
        Constructor<Person> constructor = personClass.getConstructor(String.classint.class);
        Person person = constructor.newInstance("John"25);
 
        // 메서드 호출
        Method introduceMethod = personClass.getMethod("introduce");
        introduceMethod.invoke(person);
    }
}
cs

 

위의 예제에서 Person.class는 Person 클래스의 Class 객체를 얻습니다. Class<Person>을 사용하면 컴파일러가 클래스 타입을 검사할 수 있다. 그런 다음 personClass를 통해 리플렉션 API를 사용하여 클래스의 생성자와 메서드를 찾고 호출한다.

getConstructor() 메서드는 해당 클래스의 생성자를 얻고, newInstance() 메서드를 호출하여 인스턴스를 생성한다.

마지막으로 getMethod()을 사용하여 introduce() 메서드를 얻고, invoke()를 호출하여 해당 메서드를 실행

 


안녕하세요, 저는 John이고, 25살입니다.

 

결과적으로 Person.class 클래스 리터럴을 사용하여 리플렉션을 통해 클래스 인스턴스를 생성하고, 메소드를 호출할 수도 있다

 

Person.class 는 Class<Person> 과 동일하다.

 

Person.class 에 의해 반환되는 값은 Class<Person> 의 참조 값이다.

 

 

 

 

 

Comments