본문 바로가기

Class.forName

[Java] Class.forName(String className) 그리고 Service Provider Interface JAVA의 jdbc를 공부 할 때 많이 보는 Class.forName("oracle.jdbc.OracleDrvier"); 이런 실행 문장이 있습니다. 단지, 사용 할 DBMS에 맞는 드라이버의 full name을 인수로 주었을 뿐인데 그리고 보통 저 메서드를 실행하고 리턴값을 받지도 않죠.. 그런데 저 문장을 실행하고 나면 바로 DriverManager라는 클래스에서 Connection을 얻어 쓸 수 있습니다. 어떻게 저렇게 작동하는 것일까요? 각 DBMS 마다 드라이버와 Connection의 구현이 다를 것 입니다. 하지만 Java를 사용하는 입장에서는 각 DBMS 마다 다른 API를 사용하여 DB에 연결하는 것을 원하지 않죠. 그렇게 된다면 DBMS가 바뀌는 날에는 끔찍한 참사가 일어나겠죠.. --;.. 더보기
[Java] Class.forName(String className); - 1 - 앞선 포스트에서 Class.class에 대해 이야기 하였는데 그 내용안에 Class.forName(String className) 메서드가 나옵니다. 이 메서드에 대해서 좀 더 알아보겠습니다. 풍대리님이 static 키워드를 생각해보라고 하신 것이 이 메서드를 말씀하신 거였더라구요.. 우선 Class.forName(String className)는 이렇게 구현이 되어 있고 forName0 메서드는 native 메서드입니다. Class.forName 메서드를 실행하면 해당 클래스 이름을 갖는 클래스가 클래스 로더에 로드 되면서 Class.class의 인스턴스를 리턴합니다. 앞에서도 이야기 하였지만 Class.forName("java.lang.String")을 실행하면 String.class의 명세를 갖는 .. 더보기