일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 반려견 더위
- 반려견 열사병
- 동인천 맛집
- 반려견 유기농
- 신포동 맛집
- 반려견
- 샤로수길 데이트
- 홀리스틱 유기농
- 강아지종류
- 반려견 홀리스틱
- 닥스훈트
- 강아지 유기농 사료
- 반려견 유기농 사료
- 강아지 유기농
- 쿠팡메크로
- 부산 맛집
- 반려견 종류
- 강아지 홀리스틱
- 강아지
- 티켓팅메크로
- 쿠팡매크로
- 국비지원 예습
- 샤로수길 맛집
- 반려견 사료등급
- 강아지 더위
- 강아지 종류
- 티켓팅매크로
- 서울대입구 맛집
- 자동화봇
- 강아지 열사병
- Today
- Total
심심한잉여의 잡동사니
[Java] 리플렉션 Class 클래스 본문
리플렉션이란
반사라는 것을 뜻하며 객체를 통해 클래스 정보를 분석하는 프로그램 기법이다.
클래스 파일의 위치나 이름만 있으면 해당 클래스의 정보를 얻어내고,
객체를 생성하는 것 또한 가능하게 해주는 프로그래밍 기법이다.
동적으로 객체를 생성하는 것이 가능해진다.
Class 클래스란?
리플렉션의 기초가 되는 클래스다.
공부를 하다가 취업을 하면 ~~.class 라는 문구를 많이 보게 되는데 신입의 경우 이것이 이해가 안될 수 도 있다.
인스턴스도 아니고 .class라니 햇갈릴만 하다 생각한다.
간단히 말을 하면 Class에 대한 구조정보를 가지고 있는 객체라고 보면 된다.
public class Test{
public String test1;
public String test2;
public Test(){
}
public Test(String str1, String str2){
this.test1 = str1;
this.test2 = str2;
}
public String getTest1(){}
}
이런 클래스가 있다고 가정해보자.
필드 2개와 생성자, 1개의 메소드를 가지고 있다.
즉, Class 클래스는 이런 클래스의 구조 자체를 하나의 클래스로 표현해 둔 클래스라는 것이다.
Class 클래스 내부의 메소드를 보면 getField(), getPackage() 등 클래스 안에 생성자, 필드, 패키지 등 클래스를 이루는 것을 get할 수 있는 메서드들이 있다.
이제 어느정도 Class 클래스에 대해 이해가 될 것이라 생각한다.
이 것을 실제로 사용해보면
//메인 부분 생략
Class test = Test.class;
for(Field field : test.getField()){
System.Out.println(field.getName());
}
// test1, test2 출력
for(Constructor constructor : test.getConstructors()){
System.out.print("개수 " + constructor.getParameterCount() + " = ");
for(Class parameter : constructor.getParameterTypes()){
System.out.print(parameter.getName() + " / ");
}
}
// 개수 : 0 = 파라메터 없는 생성자 출력
// 개수 : 2 = java.lang.String / java.lang.String / 파라메터 있는 생성자 출력
위 코드와 같이 출력되는 모습을 볼 수 있으며 메소드정보도 동일하게 정보를 가져올 수 있게 된다.
getDeclared~() 이렇게 시작하는 메서드들은 접근제한자에 막힌 정보들에 대해 접근이 가능하게 해주는 메서드 이며
이것을 사용하는 것은 캡슐화에 어긋난다.
이 코드를 제외한다면 public 속성이 있는 정보들에 대해 가져온다고 생각하면 된다.
즉 리플렉션 Class 클래스의 경우 해당하는 클래스 정보를 가져오기 위해 나온 기법이며
이를 이용하여 생성자도 생성이 가능하다. 즉 동적으로 생성자 생성을 위해 사용한다 생각하면 된다.
이 포스팅을 통해 현업 코드를 좀 더 잘 봤으면 좋겠다.
'코딩일기 > Java' 카테고리의 다른 글
[Java] 자바 컬렉션(Collection) 구조 정리 (0) | 2022.05.02 |
---|---|
[JAVA] 어노테이션(Anotation) (0) | 2022.04.12 |
[JAVA]POJO, DTO, DAO, VO (0) | 2022.04.07 |
[JAVA] 추상 클래스 VS 인터페이스 (0) | 2022.03.31 |
[JAVA] DTO와 VO (0) | 2022.03.30 |