public class ProductUser {
java.util.Scanner sc = new java.util.Scanner(System.in);
// non-static 변수는 객체가 생성될 때 메모리에 할당된다
// 그래서 ProductUser user = new ProductUser(); 해줬음
// ProductDAOArray dao = new ProductDAOArray();
// ProductDAOInterface dao = new ProductDAOArray(); // 업캐스팅해서 쓰자
// ProductDAOInterface dao = new ProductDAOList();
ProductDAOInterface dao; // 의존성주입, getResourceAsStream를 통해 결정
ProductUser(){
// dao = new ProductDAOList();
// user가 직접 결정하지 않고 프로퍼티스를 통해 클래스 생성해서 쓰기
Properties env = new Properties();
try {
env.load(ProductUser.class.getResourceAsStream("my.properties"));
// ProductDAOArray dao = new ProductDAOArray(); 이렇게 객체 지정해야하는걸,
// 어떤 객체를 만들지 결정권은 my.properties에게 넘김
String className = env.getProperty("product.dao");
Class clazz = Class.forName(className);
// clazz.newInstance();
Object obj = clazz.getDeclaredConstructor().newInstance();
// 매개변수 없는 생성자 이용해서 ProductDAOFile()가 실행될 것.
dao = (ProductDAOInterface)obj;
System.out.println("DAO에서 실제사용된 클래스:" + dao.getClass().getName());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
※ Properties 만드는 법
'언어 > Java' 카테고리의 다른 글
API 도큐먼트 (0) | 2023.08.08 |
---|---|
LIFO와 FIFO (0) | 2023.08.08 |
ArrayList, HashSet, HashMap 예시 (0) | 2023.08.08 |
Product 예제 3 (1) | 2023.08.04 |
Product 예제 2 (0) | 2023.08.04 |