728x90
☕ 팩토리 메소드 패턴
- 공장이 하는 일은?
- 복잡한 생상 과정을 숨기고, 완성된 인스턴스만 반환된다.
☕ 클래스 로더를 이용한 인스턴스 생성하기
Class clazz = Class.forName("클래스 풀네임");
Object obj = clazz.newInstance();
☕ 클래스 로더 예제
package com.example;
import java.lang.reflect.Method;
public class ClassLoderMain {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
// Bus b1 = new Bus();
// b1.a(); ==> 결과값: a
// a() 메소드를 가지고 있는 클래스가 있다
// 이 클래스 이름이 아직 무엇인지 모르겠다
// 나중에 이 클래스 이름을 알려주겠다
// a() 메소드를 실행할 수 있도록 코드를 작성해라
// className에 해당하는 클래스 정보를 CLASSPATH에서 읽어들이고,
// 그 정보를 clazz가 참조하도록 한다
String className = "com.example.SuperCar";
Class clazz = Class.forName(className);
// Method[] declaredMethods = clazz.getDeclaredMethods();
// for(Method m: declaredMethods){
// System.out.println(m.getName());
// // String className = "com.example.Bus"; 결과값: b c a
// }
// Object o = clazz.newInstance();
// Bus b = (Bus)o;
// b.a(); // String className = "com.example.Bus"; 결과값: a
Object o = clazz.newInstance();
Car b = (Car)o;
b.a();
}
}
package com.example;
public class SuperCar extends Car {
public void a(){
System.out.println("supercar a!!!!!!!!");
}
}
package com.example;
public class Bus extends Car {
public void a(){
System.out.println("a");
}
public void b(){
System.out.println("b");
}
public void c(){
System.out.println("c");
}
}
728x90
'개발&etc > JAVA' 카테고리의 다른 글
[JAVA] Java IO 1편 (0) | 2023.04.07 |
---|---|
[JAVA] 익명클래스와 처음 만나는 람다 (0) | 2023.04.06 |
[JAVA] 인스터스페이스 2편 - default 메소드가 필요한 이유 (0) | 2023.04.05 |
[JAVA] 인터페이스 & 로또 번호 생성기 만들기 (0) | 2023.04.05 |
[java] final 클래스, 불변객체 String (0) | 2023.03.30 |