JAVA 기초 (31) Class클래스

코린이서현이·2023년 8월 7일
0

Java

목록 보기
32/46

🙂들어가면서🙂

클래스명이 클래스인 클래스라니 푸하하
이건 사람이름이 사람인거잖아? 😏 

📕 Class 클래스

Class클래스는 class파일의 클래스나, 인터페이스, 생성자정보를 가져오는 데 사용한다.

📖 Class 클래스에 클래스 반환하기

  1. Object의 getClass()메소드 사용하기
    인스턴스 메소드로 생성된 인스턴스가 있어야 사용할 수 있다.
  2. Class에 class파일 대입하기
  3. forName()메소드를 사용해 클래스명으로 가져오기
    -> 예외처리를 해야한다. : throws ClassNotFoundException
    문자열로 가져올 수 있다.
    생성된 인스턴스가 없어도 사용할 수 있다.

👉동적로딩이 가능하다.
프로그램 실행 이후 클래스의 로딩이 필요한 경우, 문자열을 통해서 다른 클래스를 로딩할 수 있다.

public class ClassTest {
    public static void main(String[] args) throws ClassNotFoundException {
        Student student = new Student("서현",2020,false);

        Class studentClass_get = student.getClass();
        Class studentClass_direct = Student.class;
        Class studentClass_forname = Class.forName("Student");
    }
}

📖 할당한 클래스의 정보를 가져오기

📒 생성자 가져오기 : Constructor클래스의 getConstructors() 메소드

Constructor클래스 배열을 사용해서 Class의 모든 생성자를 출력할 수 있다.
⚠️import문 필수!

//클래스 import필수!!
import java.lang.reflect.Constructor;


//Constructor[] 배열명 = Class.getConstructors();
Constructor[] cons = studentClass_forname.getConstructors();
    for (Constructor c : cons) {
        System.out.println(c);
     }

👉출력 화면

public StudentClass0807(java.lang.String,int,boolean)

📒 멤버 변수 가져오기 : Field클래스의 getFields() 메소드

Field 클래스 배열을 사용해서 Class의 모든 멤버변수를 출력할 수 있다.
⚠️ import문 필수!

import java.lang.reflect.Field;
    
    Field[] files = studentClass_forname.getFields();
    for (Field f : files) {
        System.out.println(f);
    }

👉 실행화면

public java.lang.String StudentClass0807.studentName
public int StudentClass0807.studentID
public boolean StudentClass0807.scholarship

📒 메소드 가져오기 : Method클래스의 getMethods() 메소드

Method 클래스 배열을 사용해서 Class의 모든 메소드를 출력할 수 있다.
⚠️ import문 필수!

import java.lang.reflect.Method;

	Method[] methods = studentClass_forname.getMethods();
    for (Method m : methods) {
        System.out.println(m);
    }

👉 실행화면

public boolean StudentClass0807.equals(java.lang.Object)
...

📖 Class를 이용해 인스턴스 생성하기

Class의 메소드인 newInstance()메소드를 이용해 인스턴스를 생성할 수 있고, 반환형이 Object이기 때문에 생성된 객체형으로 반환해야한다.
또한 InstantiationException, IllegalAccessException예외처리를 해줘야한다.

이런 방법은 더 복잡하고 예외처리도 필요하기 때문에 직접알고 있는 클래스라면 해당 클래스로 생성하는 것이 좋다.

public class ClassTest {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class studentClass_forname = Class.forName("StudentClass0807");

        StudentClass0807 studentClass = (StudentClass0807) studentClass_forname.newInstance();
    }
}

⚠️forName() 의 주의점

동적로딩 방식에 오류가 나면 컴파일오류가 아닌 실행오류로 이어질 수 있다.
조심조심~

더알아보기

profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글