소프트웨어 개발/Java - Basic

DriverManager쓰는과정

늘근이 2014. 10. 20. 13:27
package first;
public class ReflectTest03 { 

    public static void main(String[] args) throws Exception{ 
        Class.forName("first.Child03"); 
        Parent03 p = DManager.get(); 
        p.exec(); 
        
        Class.forName("oracle.Driver.")
        
    } 

} 
// A가 제공 
interface Parent03{ 
    public void exec(); 
} 

// A가 제공 
class DManager{ 
    private static Parent03 instance; 
    public static void setInstance(String className) 
        throws RuntimeException{ 
        try{ 
            Class clazz = Class.forName(className); 
            Object obj = clazz.newInstance(); 
            DManager.instance = (Parent03)obj; 
        }catch(Exception ex){ 
            throw new RuntimeException(ex); 
        } 
    } 
    public static Parent03 get(){ 
        return instance; 
    } 
} 

// B가 제공 
class Child03 implements Parent03{ 
    static{ 
        DManager.setInstance("first.Child03"); 
    } 
    public void exec(){ 
        System.out.println("Child03.exec"); 
    } 
} 
즉, 이러한식으로 구현이 안에서 되는것이다


DriverManager는 Class.forName에서 포함되어있는 static블럭에서 세팅이 되는것이다. 오라클에 관련된 인스턴스가 나오고, DriverManager 인터페이스가 세팅이 되는것이다.
근데 static은 동시성의 문제가 생길수도 있다. 따라서 개선된 방법을 쓰는것이다.