https://youtu.be/EZK3pDJSK9s?t=1678
Class 클래스
자바의 모든 클래스와 인터페이스는 컴파일 후 class 파일로 생성됨
class 파일에는 객체의 정보(멤버변수, 메서드, 생성자 등)가 포함되어 있음
Class 클래스는 컴파일 된 class 파일에서 객체의 정보를 가져올 수 있음
Class 클래스를 가져오는 방법_3가지
1. Object 클래스의 getClass() 메서드 호출
getClass() : Class 클래스를 반환해주는 메서드
2. 클래스명 입력하여 Class 클래스 호출하기
★ 1번과 2번 방법의 경우, 찾고자 하는 클래스가 컴파일 되어 있어야만 사용할 수 있다.-> "static 로딩"
3. forName 이용하는 방법
해당 클래스가 존재하지 않으면 에러가 뜬다, 있는 클래스만 클래스 명이 나온다.
forName() 메서드는 기억을 해두자!
★ 1번, 2번 방법과 달리 컴파일 하지 않아도 된다.
해당 클래스가 있으면 메모리에 로딩->"동적 로딩"
Class.forName() 메서드로 동적 로딩하기
- 동적로딩이란 컴파일 시에 데이터 타입 모두 biding 되어 자료형이 로딩되는 것(static loading)이 아니라 실행 중에 데이터 타입을 알고 binding 되는 방식
- 프로그램밍 할 때는 어떤 클래스를 사용할지 모를 때 변수로 처리하고 실행될 때 해당 변수에 대입된 값의 클래스가 실행될 수 있도록 CLass 클래스에서 제공하는 Static 메서드
- 실행 시에 로딩되므로 경우에 따라 다른 클래스가 사용될 수 있어 유용함
- 컴파일 타임에 체크할 수 없으므로 해당 문자열에 대한 클래스가 없는 경우 예외(ClassNotFountExeception) 가 발생할 수 있음 ==> 예외처리 필수
package ClassEx;
public class Person {
String name;
int age;
public Person() {} // 기본생성자
public Person(String name) { // 인자생성자
this.name = name;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
package ClassEx;
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException {
Person person = new Person();
// Class 클래스를 가져오는 방법_2가지
// 1. Object 클래스의 getClass() 메서드 호출
// getClass() : Class 클래스를 반환해주는 메서드
Class pClass1 = person.getClass();
System.out.println(pClass1.getName());
// 2. 클래스명 입력하여 Class 클래스 호출하기
Class pClass2 = Person.class;
System.out.println(pClass2.getName());
// 3. forName 이용하는 방법
// 해당 클래스가 존재하지 않으면 에러가 뜬다, 있는 클래스만 클래스 명이 나온다.
// forName() 메서드는 기억을 해두자!
Class pClass3 = Class.forName("ClassEx.Person"); // 클래스 이름 입력
System.out.println(pClass3.getName());
}
}
결과
ClassEx.Person
ClassEx.Person
ClassEx.Person
참고자료
https://blog.hyper-link.kr/2011/11/24/java-class-for-name/
'Back-End > Java' 카테고리의 다른 글
[Java] Swing - Event (0) | 2021.09.29 |
---|---|
[Java] Swing - Layout(배치관리자) (0) | 2021.09.29 |
[Java] Swing - JComboBox, JList, JLable, JTextField, JTable, JTabbedPane, JMenu, ETC (0) | 2021.09.29 |
[Java] GUI(AWT, Swing) - JFrame, JButton, JCheckBox, JRadioButton, JToggleButton (0) | 2021.09.29 |
[JAVA] 시스템과 파일 입출력(Java.io) - Input, Output, Stream, Reader, Writer, File (0) | 2021.09.17 |
댓글