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 +
'}';
}
}