Search

[JDBC] Class.forName()으로 드라이버 등록이 되는 원리

Last update: @2/1/2023

JDBC 사용할 때 Class.forName(“oracle.jdbc.driver.OracleDriver”) 만으로 드라이버 등록이 되는 이유

Class.forName()은 단순히 클래스를 이름으로 찾아서 반환해주는 메서드인데 해당 클래스가 드라이버로 등록이 된다고 해서 어떤 원리일까 찾아봄
드라이버 클래스 내부에는 아래와 같은 static initializer(정적 초기화 블럭)이 있음
static { java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); }
Java
복사
정적 초기화 블럭은 클래스가 런타임에 최초로 JVM에 로딩될 때 딱 한 번 실행되는 코드 블럭인데, 모양은
static { }
Java
복사
이렇게 단순하게 생김
따라서Class.forName("oracle.jdbc.driver.OracleDriver")를 실행하면 내부의 정적 초기화 블럭이 실행되고, DriverManager 클래스의 registerDriver 메서드를 통해 스스로를 드라이버로 등록하기 때문에 DriverManager.getConnection()메서드를 사용할 수 있는 원리
다만 자바1.6, JDBC 4.0부터는 Class.forName() 없이도 아래처럼 URL만으로도 자동으로 드라이버를 찾아서 커넥션을 만들어준다고 함
DriverManager.getConnection(url, user, password);
Java
복사

References