Java 11

2017. 2. 13. 21:13Study/Java

728x90

URL 클래스 로더

URL[] urlArray = { new File("subdir/").toURI().toURL() };

URLClassLoader ucl = new URLClassLoader(urlArray);

Object obj = ucl.loadClass("Hello").newInstance();   

-> 클래스를 로딩하기 위해서 클래스 로더 객체를 인스턴스 해야 한다. URLClassLoader를 생성할 때 URL 객체 배열을 요구, HTTP, FTP를 통해 클래스 로딩 가능

리플렉션

- 리플렉션 기법 1: 런타임 중에 객체를 이용해서 객체의 정보를 조사

- 리플렉션 기법 2: 런타임 중에 프로그램의 상태나 기능을 동적으로 조작

- 리플렉션 기법 3: 동적이며 유연한 프로그래밍이 가능하기 떄문에 프레임 워크에서 주로 사용

얻을 수 있는 정보

- 클래스 이름

- 클래스의 제어자(public, private, static)

- 패키지의 정보(com.packaging)

- 클래스의 부모 클래스(Class 클래스 형을 갖는 객체를 받을 수 있다.)

- 클래스의 생성자(Constructor 클래스 형을 갖는 객체를 받을 수 있다.)

- 클래스의 메소드(Method 클래스 형을 갖는 객체를 받을 수 있다.)

- 클래스의 변수(Field 클래스 형을 갖는 객체를 받을 수 있다.)

- 클래스의 Annotation(Annotation 주석의 일종, Annotation 클래스 형을 갖는 객체를 받을 수 있다.)

-> 클래스의 정보를 확인, 동적 프로그래밍 지향(ex, 자동완성 기능), 클래스는 속성(변수)와 기능(메소드)의 조합, 객체는 클래스 정보를 바탕으로 메모리(JVM)에 인스턴스된 것, 리플렉션은 런타임 시점에서 동적으로 클래스의 정보를 추출하고 실행하는 환경 제공

클래스 파일의 정보를 얻기 위한것

java.lang.class 

-> 리플렉션 클래스 정보 분석 API, 클래스를 추상한 클래스, 클래스 파일의 정보를 얻기위한 클래스, 메소드, 필드, 생성자, 인터페이스 정보

class 객체 생성 방법

1. 대상 객체에서 제공하는 getClass() 메소드 이용하는 방법

Class [객체이름] = [대상객체].getClass();

2. 대상 클래스를 이용하여 Class 객체 받아오는 방법

Class [객체이름] = [대상객체].class; (해당 클래스의 Class 객체(인스턴스) 반환)

3. 대상 클래스의 이름을 이용하여 Class 객체 받아오는 방법

Class [객체이름] = Class.forName("java.lang.String" or "com.packaing");

java.lang.reflect

-> Constructor(생성자),Method(메소드),Field(변수)

class 객체 생성 방법

1. Constructor 클래스 (.newInstance(-); 오버로딩된 생성자들 중 원하는 형태의 생성자 호출 가능)

Class<String> cla = String.class;

Constructor<String> cons1 = cla.getConstructor(String.class);

2. Method 클래스 (.Invoke(-); 로 메소드를 동적으로 실행)

Class<String> cla = String.class;

Method m = cla.getMethod("Length",new Class[] {});

3. Field 클래스 (.get(-); 메소드의 매개변수로 다른 객체의 값 얻을 수 있다.)

Class<String> cla = String.class;

Field field = cla.getField("CASE_INSENSITIVE_ORDER");

728x90

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

Java 13  (0) 2017.02.14
Java 12  (0) 2017.02.14
Java 11  (1) 2017.02.13
Java 10  (0) 2017.02.10
Java 09  (0) 2017.02.05
Java 08  (0) 2017.02.04