[Java] Class 클래스, Reflection 프로그래밍, newInstance 메서드

2020. 6. 30. 00:25Language/Java

1. Class 클래스

Java의 모든 클래스와 인터페이스는 컴파일 후 .class 파일로 생성된다. .class 파일에는 객체의 정보가(멤버변수, 메서드, 생성자 등) 담겨있다. Class 클래스는 컴파일된 class파일에서 객체의 정보를 가져올 수 있다.

1) Object 메서드를 이용한 Class 클래스 호출

String s = new String();
Class c = s.getClass();

2) 컴파일된 상태로 String.Class 호출

Class c = String.Class;

3) forName 메서드와 동적 로딩

가장 많이 사용하는 메서드로 해당 Statement가 수행될 때 로딩한다. 컴파일이 아닌 Run 타임에 수행하며 풀네임에 해당하는 클래스가 로컬에 있을 경우 사용이 가능하다. 상황에 맞게 원하는 라이브러리 및 클래스를 매칭할 수 있다.

Class c = Class.forName("java.lang.String");

※ 컴파일 시 데이터 타입이 모두 binding되어 자료형이 로딩되는 것(Static Loading)이 아닌 실행 중에 데이터 타입을 알고 binding 되는 방식이다.
※ JDBC를 사용할 때 JDBC DB 라이브러리(Oracle, MSSQL, MySQL) 모두 Static하게 링크하여 컴파일을 하는 방식이 아닌 해당 라이브러리를 설치한 상태에서 필요할때 호출 할 수 있도록 동적 로딩을 사용한다.


StringClassTest

 

 

 

2. Reflection 프로그래밍

Class 클래스로 부터 객체의 정보를 가져와 프로그래밍 하는 방식이다. java.lang.reflect 패키지에 있는 클래스를 활용한다. 로컬에 객체가 없거나 자료형을 알 수 없는 객체가 존재할때, 해당 객체의 정보를 꺼내와서 하는 프로그래밍이다.

Person

1) 로컬에 Person 클래스가 있을 경우

로컬에 Person 클래스가 있을 경우

2) 로컬에 Person 클래스가 없을 경우 (가정 1)

Class로 부터 생성자는 newInstance() 메서드를 이용하여 호출한다. newInstance을 매개변수 없이 사용시 기본 생성자 호출을 하며 다운캐스팅을 진행해주어야한다. 값 설정 없이, 기본 생성자 호출을 통한 출력은 null이다.

로컬에 Person 클래스가 없을 경우 (가정) 1

3) 로컬에 Person 클래스가 없을 경우 (가정 2)

기본 생성자 호출이 아닌 매개변수를 가진 생성자를 호출한다.

로컬에 Person 클래스가 없을 경우 (가정) 2

 

 

 

3. newInstance() 메서드

Class 클래스 메서드이다. new 키워드를 사용하지 않고 인스턴스를 생성할 수 있다.


[참고] github.com/ozofweird/Java_Practice

728x90

'Language > Java' 카테고리의 다른 글

[Java] 제네릭 프로그래밍  (0) 2020.06.30
[Java] String, Wrapper 클래스  (0) 2020.06.30
[Java] Object 클래스  (0) 2020.06.29
[Java] 인터페이스  (0) 2020.06.24