본문 바로가기
Back-End/Java

[Java] Class 클래스

by 찐코딩 2021. 9. 30.

https://youtu.be/EZK3pDJSK9s?t=1678 

Class 클래스

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

class 파일에는 객체의 정보(멤버변수, 메서드, 생성자 등)가 포함되어 있음

Class 클래스는 컴파일 된 class 파일에서 객체의 정보를 가져올 수 있음

 

Class 클래스를 가져오는 방법_3가지


1. Object 클래스의 getClass() 메서드 호출
getClass() : Class 클래스를 반환해주는 메서드

2. 클래스명 입력하여 Class 클래스 호출하기

 

★ 1번과 2번 방법의 경우, 찾고자 하는 클래스가 컴파일 되어 있어야만 사용할 수 있다.-> "static 로딩"

3. forName 이용하는 방법
해당 클래스가 존재하지 않으면 에러가 뜬다, 있는 클래스만 클래스 명이 나온다.
forName() 메서드는 기억을 해두자!

★ 1번, 2번 방법과 달리 컴파일 하지 않아도 된다.

해당 클래스가 있으면 메모리에 로딩->"동적 로딩"

 

Class.forName() 메서드로 동적 로딩하기

- 동적로딩이란 컴파일 시에 데이터 타입 모두 biding 되어 자료형이 로딩되는 것(static loading)이 아니라 실행 중에 데이터 타입을 알고 binding 되는 방식

 

- 프로그램밍 할 때는 어떤 클래스를 사용할지 모를 때 변수로 처리하고 실행될 때 해당 변수에 대입된 값의 클래스가 실행될 수 있도록 CLass 클래스에서 제공하는 Static 메서드

 

- 실행 시에 로딩되므로 경우에 따라 다른 클래스가 사용될 수 있어 유용함

 

- 컴파일 타임에 체크할 수 없으므로 해당 문자열에 대한 클래스가 없는 경우 예외(ClassNotFountExeception) 가 발생할 수 있음  ==> 예외처리 필수

 

package ClassEx;

public class Person {
	
	String name;
	int age;
	
	public Person() {} 	// 기본생성자
	
	public Person(String name) {		// 인자생성자
		this.name = name;		
	} 
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;	
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}
package ClassEx;

public class ClassTest {

	public static void main(String[] args) throws ClassNotFoundException {
		
		Person person = new Person();
		
		// Class 클래스를 가져오는 방법_2가지
		
		// 1. Object 클래스의 getClass() 메서드 호출	
		// getClass() : Class 클래스를 반환해주는 메서드
		Class pClass1 = person.getClass();
		System.out.println(pClass1.getName());
		
		// 2. 클래스명 입력하여 Class 클래스 호출하기
		Class pClass2 = Person.class;
		System.out.println(pClass2.getName());
		
		// 3. forName 이용하는 방법
		// 해당 클래스가 존재하지 않으면 에러가 뜬다, 있는 클래스만 클래스 명이 나온다.
		// forName() 메서드는 기억을 해두자!
		Class pClass3 = Class.forName("ClassEx.Person");	// 클래스 이름 입력
		System.out.println(pClass3.getName());
	}
	

}

결과

ClassEx.Person
ClassEx.Person
ClassEx.Person

 

 

 

참고자료

https://blog.hyper-link.kr/2011/11/24/java-class-for-name/

 

Class.forName 메소드의 사용법

Class.forName 메소드의 사용법 클래스의 동적 로딩이 궁금하신 분이나서블릿을 공부하다보면 클래스가 동적으로 로딩되는 것을 볼 수 있을 것입니다.저 역시 어떻게 동적으로 로딩 되는지 궁금해

blog.hyper-link.kr

 

댓글