본문 바로가기
프로그래밍 언어/java

[java] Class 클래스, 자바 리플렉션

by m2162003 2021. 3. 18.

Class 클래스

자바의 모든 클래스와 인터페이스는 컴파일 후  class 파일로 생성된다.

class파일에는 멤버 변수, 생성자 등 객체 정보가 포함되어 있다.

Class 클래스는 컴파일된 class파일에서 객체 정보를 가져올 수 있다. 현재 사용하는 클래스에 어떤 메서드가 있는지, 생성자가 뭔지 확인가능하다는 말

 

 

Class클래스 가져오기

3가지 방법이 존재한다.

public static void main(String[] args) {
		// 1.
		Class c1 = String.class;

		// 2.
		String str = new String();
		Class c2 = str.getClass();

		// 3.
		Class c3 = Class.forName("java.lang.String");

	}

 

	// String class의 constructor 받아오기
         Constructor[] cons = c3.getConstructors(); 
         for (Constructor c: cons) {
		 	System.out.println(c); 
         }
		 
	// String class의 메서드 받아오기 
         Method[] methods = c3.getMethods(); 
         for (Method m :methods) { 
         	System.out.println(m); 
         }
		 
		 

이런 식으로 클래스의 생성자와 메서드를 받아올 수 있다.

 

 

forName(): Class 클래스의 static 메서드

1,2,3 중에 가장 많이 사용된다.

프로그램 실행 시에 로딩이 되는 동적 로딩 방식이다. 대신, 컴파일 타임에 체크가 불가능하기 때문에 해당 문자열에 대한 클래스가 없으면 ClassNotFoundException이 발생할 수 있다.

자바 리플랙션 API 일부이다.

JDBC를 동적로딩할때도 사용되는 방법이다.

 

 

자바 리플렉션

class 클래스로부터 객체의 정보를 가져와서 프로그래밍하는 방식.

구체적인 클래스 타입을 알지 못해도 클래스의 메서드와 변수에 접근가능하게 하기 때문에, 로컬에 객체가 없고 자료형을 알 수 없는 경우 유용한 프로그래밍이다.

동적바인딩이라 런타임에 클래스 타입이 정해진다.

java.lang.reflect 패키지에 있는 클래스를 활용한다.

 

 

'프로그래밍 언어 > java' 카테고리의 다른 글

[java] 예외처리2  (0) 2021.04.05
[java] 예외 처리  (0) 2021.04.05
[java] String, Wrapper 클래스  (0) 2021.03.18
[java] Object 클래스  (0) 2021.03.18
[java] 인터페이스 다중 상속  (0) 2021.03.12

댓글