Java

자바의 유용한 클래스 - Class 클래스

codewalker 2021. 4. 28. 23:06

Class 클래스

  • 자바의 모든 클래스와 인터페이스는 컴파일 후 class 파일이 생성됨
  • Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드가 제공됨
  • Class.forName("클래스 이름") 메서드로 클래스를 동적으로 로드
    • Class c = Class.forName("java.lang.String");
    • 인자 "java.lang.String" 는 문자열 타입이기 때문에 컴파일 단계에서 오타로 인한 에러를 발견하기 어려우므로 주의!

 

  • 클래스 이름으로 직접 Class 클래스 가져오기
    • Class c = String.class;

 

  • 생성된 인스턴스에서 Class 클래스 가져오기
    • String s = new String();
    • Class c = s.getClass();
    • getClass() 는 Object 클래스에 정의되어있는 메서드임

 

 

Class 클래스로 String 클래스가 가진 생성자와 메서드 정보를 불러와서 확인함

 

 

동적 로딩

  • 컴파일 시에 데이터 타입이 binding 되는 것이 아닌, 실행(runtime) 중에 데이터 타입을 binding 하는 방법
  • 프로그래밍 시에는 문자열 변수로 처리했다가 런타임시에 원하는 클래스를 로딩하여 binding 할 수 있다는 장점
  • 컴파일 시에 타입이 정해지지 않으므로 동적 로딩시 오류가 발생하면 프로그램의 심각한 장애가 발생가능

 

Person.java

 

 

이 코드의 일련의 과정은 결국 Person kimPerson = new Person("Kim"); 을 한 것과 같다.

 

 

클래스 정보 알아보기

  • Reflection 프로그래밍 : Class 클래스를 사용하여 클래스의 정보(생성자, 변수, 메서드 등)를 알 수 있고, 인스턴스를 생성하고, 메서드를 호출하는 방식의 프로그래밍
  • 로컬 메모리에 객체가 없는 경우, 원격 프로그래밍, 객체의 타입을 알 수 없는 경우에 사용
  • 로컬은 같은 메모리 공간을 공유하는 즉 같은 프로세스를 의미함, 서로 다른 프로세스면 같은 머신 안에서도 서로 다른 메모리 공간을 차지함
  • java.lang.reflect 패키지에 있는 클래스를 활용하여 프로그래밍
  • 일반적으로 자료형을 알고 있는 경우엔 사용하지 않음

 

'Java' 카테고리의 다른 글

자바의 내부 클래스  (0) 2021.05.05
자바 정렬 인터페이스, Comparable과 Comparator  (1) 2021.05.05
자바의 메모리 영역과 가상 메서드  (0) 2021.04.17