JAVA/Java2021-2

Class 클래스(클래스 이름이 Class)

RoarinGom 2021. 10. 8. 12:50

Class 클래스

: 컴파일하면 자바의 클래스와 인터페이스는 .class파일이 생성되는데 이 파일에 대한 정보를 가지고 있다.

Class는 컴파일된 class파일을 로드하여 객체를 동적으로 로드하고 정보를 가져오는 메서드를 가지고있다

 

동적로딩

: 컴파일 시에 데이터 타입이 binding 되는 것이 아닌, 실행(runtime)중에 데이터 타입을 binding 하는 방법

: 프로그래밍 시에는 문자열 변수로 처리했다가, 런타임시에는 원하는 클래스를 로딩하여 binding할 수 있는 장저

: 컴파일 시에 타입이 정해지지 않으므로 동적 로딩시 오류가 발생하면 프로그램의 심각한 장애가 발생할 수 있다.

 

ex1) Class.forName("클래스이름");

package Basic_Grammar.chap4.ch04Class;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Test01_ClassMethod {
    public static void main(String[] args) throws ClassNotFoundException {
//런타임시 동적로딩 클래스를 동적으로 로딩함
        Class c1=Class.forName("java.lang.String");
//직접 Class 가져오기
        Class c2=String.class;
//생성자가져오기
        Constructor[] cons= c1.getConstructors();
        for (Constructor con:cons) {
            System.out.println(con);
        }
//메서드 가져오기
        Method[] methods=c2.getMethods();
        for(Method meth:methods){
            System.out.println(meth);
        }
//인스턴스 생성 (new 대신 Class 클래스

    }
}

 

ex2) 인스턴스 생성

package Basic_Grammar.chap4.ch04Class;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Test02_NewInstance {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        //인스턴스 생성 (new 대신 Class 클래스

        Class c1=Class.forName("Basic_Grammar.chap4.ch04Class.Test02_Person");

        Test02_Person person=(Test02_Person) c1.newInstance();

        person.setName("Lee");
        System.out.println(person.getName());

//        Class.forName이용안하고 한 번 생성된 클래스를 통해서 클래스를 가져온다
        Class c2=person.getClass();
        Test02_Person person2=(Test02_Person) c1.newInstance();
        System.out.println(person2);

        Class[] parameterTypes={String.class};
        Constructor cons=c2.getConstructor(parameterTypes);

//      아래의 방법은 Test02_Person kimPerson=new Test02_Person("Kim");한 것과 같다.
        Object[] initargs={"Kim"};
        Test02_Person kimPerson=(Test02_Person) cons.newInstance(initargs);
        System.out.println(kimPerson);




    }
}

package Basic_Grammar.chap4.ch04Class;

public class Test02_Person {
    private String name;
    private int age;

    public Test02_Person(String name) {
        this.name = name;
    }

    public Test02_Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Test02_Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}