컴퓨터공학 💻 도서관📚
Part2. 4-4 Class 클래스 사용하기 (조금 이해 안 된 강의) 본문
✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습
Part2. 4-4 Class 클래스 사용하기 (조금 이해 안 된 강의)
들판속초록풀 2025. 6. 19. 10:38Class 클래스
* 자바의 모든 클래스와 인터페이스는 컴파일 후 class 파일이 생성된다
* Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드가 제공됨
* Class.forName("클래스 이름") 메서드로 클래스를 동적으로 로드 함
forName 메서드는 클래스나 인터페이스에 대해서 맴핑을 해주는, 동적 로딩(바인딩)을 해주는 메서드이다.
동적 로딩, 동적 바인딩, 동적 할당
동적 로딩, 동적 바인딩, 동적 할당
computer-science-library.tistory.com
// "java.lang.String" : String 클래스에 대한 풀네임
Class c = Class.forName("java.lang.String"); // c의 클래스가 미정이었다가 String으로 동적으로 로딩됨
* 클래스 이름으로 직접 Class 클래스 가져오기
Class c = String.class;
* 생성된 인스턴스에서 Class 클래스 가져오기
String s = new String();
Class c = s.getClass(); //Object 메서드
동적 로딩
- 컴파일 시에 데이터 타입이 binding 되는 것이 아닌, 실행(runtime) 중에 동적으로 데이터 타입을 binding 하는 방법
- 장점 : 프로그래밍 시에는 문자열 변수로 처리했다가 런타임시에 원하는 클래스를 로딩하여 binding 할 수 있다는 장점
데이터 타입을 다 선언하는게 아니라, 시스템이 돌아가다가 필요한 데이터 타입, 클래스를 그때 부를 수 있다. - 단점 : 컴파일 시에 타입이 정해지지 않으므로 동적 로딩시 오류가 발생하면 프로그램의 심각한 장애가 발생 가능
속도가 조금 느리고, 컴파일 시에 타입 디텍션이 안 된다.
예시로 String을 string으로 대소문자를 잘못 쓰면 이런 자료형을 못 찾기 때문에 에러가 뜸
Class의 newInstance() 메서드로 인스턴스 생성
* new 키워드를 사용하지 않고 클래스 정보를 활용하여 인스턴스를 생성할 수 있음
클래스 정보 알아보기
- reflection 프로그래밍 : Class 클래스를 사용하여 클래스의 정보(생성자, 변수, 메서드)등을 알 수 있고 인스턴스를 생성하고, 메서드를 호출하는 방식의 프로그래밍
- 로컬 메모리에 객체가 없는 경우, 원격 프로그래밍, 객체의 타입을 알 수 없는 경우에 사용한다
- java.lang.reflect 패키지에 있는 클래스를 활용하여 프로그래밍
- 일반적으로 자료형을 알고 있는 경우엔 사용하지 않음
// 이 부분은 이해가 잘 안 간다. 지금은 넘어가도록 하자
public class StringTest {
public static void main(String[] args) throws ClassNotFoundException {
Class c3 = Class.forName("java.lang.String");
Constructor<String>[] cons = c3.getConstructors(); // constructor array로 반환
for(Constructor con: cons) {
System.out.println(con);
}
System.out.println();
Method[] methods = c3.getMethods();
for(Method method : methods) {
System.out.println(method);
}
}
}
// newInstance() 메서드 예시
public class Person {
private String name;
private 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;
}
public String toString() {
return name;
}
}
// newInstance() 메서드 예시
public class ClassTest {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
ClassNotFoundException, NoSuchMethodException, SecurityException {
Person person = new Person("James");
System.out.println(person);
Class c1 = Class.forName("ch04.Person");
Person person1 = (Person)c1.newInstance();
System.out.println(person1);
// 밑에 부분이 Person kim2 = new person("Kim"); 이거랑 똑같은 거다
Class[] parameterTypes = {String.class}; // 클래스
Constructor cons = c1.getConstructor(parameterTypes); // 생성자
Object[] initargs = {"김유신"}; // 인스턴스
Person personLee = (Person)cons.newInstance(initargs); // 인스턴스 생성
System.out.println(personLee);
}
}
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 5-3 배열(Array) 구현하기 (0) | 2025.06.20 |
---|---|
Part2. 5-1, 2 여러가지 자료구조에 대해 알아봅시다. (4) | 2025.06.20 |
Part2. 4-3 String, StringBuilder, StringBuffer 클래스, text block (0) | 2025.06.19 |
Part2. 4-2 Object 클래스의 메서드 활용 (equals 메서드, hashCode 메서드, clone() 메서드) (0) | 2025.06.17 |
Part2. 4-1 Object 클래스 - 모든 클래스의 최상위 클래스 (toString 메서드) (0) | 2025.06.17 |
Comments