전공공부/JAVA

Class.forName()의 동작원리

프로호구래머 2020. 8. 11. 17:24

JSP/Servlet에서 JDBC를 다루는 법을 공부하다가 Class.forName()이 반환하는 값도 없고 DriverManager에서 관련 Url을 파라미터로 넘기면서 Url과 연관된 Driver의 connection을 반환하는 것의 내부적인 동작을 알고 싶어서 여기저기 살펴보고 이해한 내용을 정리해두려 한다.

 

우선, JSP는 java code로 변환되고 변환된 java code를 compile하면 servlet class가 생성된다. 여기서의 java도 기존의 java와 마찬가지로 JVM을 기반으로 동작하게 된다.

 

Class.forName()에서 사용되는 Class는 java.lang.Class이다.

java.lang.Class는 JVM에서 동작할 클래스의 정보(클래스의 이름, 멤버 변수들과 메소드들, 클래스의 종류 등)를 묘사하기 위한 일종의 메타 클래스(Meta-Class)이다.

 

- Class.forName(Driver's Fully Qualified Name)

Class.forName은 parameter로 Driver's Fully Qualified Name을 보낸다.

Driver's Fully Qualified Name : Driver의 완전한 이름(ex. mysql을 이용하기 위한 JDBC Driver's Fully Qualified Name은 com.mysql.jdbc.Driver이다)

 

Class.forName() method가 호출되면 우선 JVM에 해당 이름을 가진 Class(사용하고자 하는 JDBC Driver)가 존재하는지 확인하고 없다면 JVM의 ClassLoader를 통해서 해당 Class를 JVM의 메모리 상으로 올리라고 한다. 만약 해당 Driver가 존재하지 않으면 ClassNotFoundException이 발생하고 존재한다면 해당 Driver는 JVM의 메모리상에 존재하게 된다.

 

그 이후에, DriverManager.getConnection(Driver, User, Pwd)를 호출하게 되면 DriverManager가 JVM상에 존재하는 Driver 중에 Client에서 요청하는 Driver가 존재하는지 확인하고 존재한다면 해당 Driver의 Connection을 생성해서 리턴해주게 되면 Client는 해당 Connection을 가지고 Database와 통신하게 되는 것이다. 

 

아직은 스스로도 정확히 이해가 덜 된 상태에서 조금이나마 정리해 두기 위해서 조금 끄적여 보았다. 

다음에 조금 시간이 된다면 좀더 확실히 이해하고 글을 잘 써보아야 겠다.

 


출처

https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#forName-java.lang.String-

https://heavyfive.tistory.com/entry/Class-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%9D%98-%EC%9A%A9%EB%8F%84

https://d2.naver.com/helloworld/1230

'전공공부 > JAVA' 카테고리의 다른 글

Arrays.sort() 오름차순 내림차순  (0) 2020.10.12
[JAVA] Comparable과 Comparator의 차이점  (0) 2020.10.07
[JAVA] Math.pow() 를 이용한 거듭제곱  (0) 2020.10.07
[JAVA] ClassLoader 란?  (0) 2020.09.18
java string 비교  (0) 2020.08.28