Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 예외미루기
- 메소드오버로딩
- 한국건설관리시스템
- Java
- 대덕인재개발원
- 추상메서드
- 환경설정
- 다형성
- 예외처리
- 참조형변수
- oracle
- 컬렉션프레임워크
- exception
- cursor문
- 생성자오버로드
- 어윈 사용법
- EnhancedFor
- 컬렉션 타입
- 자바
- 인터페이스
- 자동차수리시스템
- 제네릭
- 집합_SET
- GRANT VIEW
- NestedFor
- 오라클
- 정수형타입
- 사용자예외클래스생성
- abstract
- 객체 비교
Archives
- Today
- Total
거니의 velog
(22) 토요일 수업 5 본문
package ddit.chap13.test02;
// 클래스 객체 생성시 처리 순서?
// static 멤버 변수(전역 변수) -- 왜 쓰지?
// static 블럭 -- 왜 쓰지?
// 멤버 변수(전역변수) -- 왜 쓰지?
// 블럭 -- 왜 쓰지?
// 생성자 함수 -- 왜 쓰지?
// 객체 1번 호출 이후 순서
// 멤버 변수(전역변수)
// 블럭
// 생성자 함수
public class TestVO {
// 멤버 변수
private String testId;
private String testName;
// static 변수
private static String data = "test";
static {
System.out.println("static 초기화 block 영역 호출");
}
{
System.out.println("초기화 block 영역 호출");
}
// 생성자
public TestVO () {}
public TestVO (String testId, String testName) {
this.testId = testId;
this.testName = testName;
}
public void test() {
System.out.println("테스트 함수 호출");
}
@Deprecated
public void test2() {
System.out.println("테스트 함수2 : Deprecated 호출");
}
@Override
public String toString() {
return "TestVO [testId=" + testId + ", testName=" + testName + "]";
}
public String getTestId() {
return testId;
}
public void setTestId(String testId) {
this.testId = testId;
}
public String getTestName() {
return testName;
}
public void setTestName(String testName) {
this.testName = testName;
}
public static String getData() {
return data;
}
public static void setData(String data) {
TestVO.data = data;
}
}
package ddit.chap13.test02;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test01 {
public static void main(String[] args) {
// 리플렉션
// 텍스트를 자바 객체로 호출
// Member --> new MemberVO()
// 시스템을 동적으로 호출하고 싶을 때...
// 결제 모듈에 로직이 들어가면 안 된다. 모듈은 결제만 해야지 추가 로직이 들어가면 안 됨.
// 이를 처리하기 위함.
// 클래스명 : TestVo -> ddit.chap13.test02.TestVO
// String -> Class
// String -> Class -> Object(new TestVO())
// String -> Class -> Constructor -> Object(new TestVO("a001", "김은대"))
// String -> Class -> Method -> 호출 invoke (test())
// String -> Class -> Field -> 멤버 변수 접근
try {
// 1. 클래스 객체 생성
Class<?> forName = Class.forName("ddit.chap13.test02.TestVO");
System.out.println(forName);
// 2. 객체 생성 : new MemberVO()
Object newInstance = forName.newInstance(); // testVO 객체
TestVO vo = (TestVO) newInstance;
vo.setTestId("a001");
System.out.println(vo);
// String -> Class -> Object(new TestVO())
Constructor<?> const1 = forName.getDeclaredConstructor();
Object obj1 = const1.newInstance();
// String -> Class -> Constructor -> Object : new TestVO("a001", "김은대")
Constructor<?> const2 = forName.getDeclaredConstructor(String.class, String.class);
Object obj2 = const2.newInstance("a001", "김은대"); // 김은대
TestVO test2 = (TestVO) obj2;
System.out.println("test2 testName : " + test2.getTestName());
System.out.println("obj2 : " + obj2);
// Field : testName 변경
// String -> Class -> Field -> 내가 정의한 생성자 함수에 접근
Field[] getDeclaredFields = forName.getDeclaredFields();
for (Field f : getDeclaredFields) {
System.out.println("필드명 = " + f.getName());
}
Field field1 = forName.getDeclaredField("testName");
String name = field1.getName();
field1.setAccessible(true);
Object object = field1.get(obj2); // 객체.필드 --> 필드.get(객체)
System.out.println("reflection test2 testName : " + object);
// Field 값 변경
// test2.setTestName("김은순") -> field.set(객체, 값)
field1.set(obj2, "김은순");
System.out.println(obj2);
// Method
// test.setTestName("김은오") -> method.invoke(객체, 값)
// String -> Class -> Method -> 호출()
Method method = forName.getDeclaredMethod("setTestName", String.class);
method.invoke(obj2, "김은오"); // test.setTestName("김은오")
System.out.println(obj2);
// 스프링 어노테이션 제작 방법
{
Method method2 = forName.getDeclaredMethod("setTestName", String.class);
method2.invoke(obj2, "김은일"); // test.setTestName("김은일")
System.out.println(obj2);
}
{
Method method3 = forName.getDeclaredMethod("test2"); // test()
method3.invoke(obj2); // test.setTestName("김은일")
Deprecated anno = method3.getDeclaredAnnotation(Deprecated.class);
System.out.println(anno);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package ddit.chap13.test02;
import java.util.HashMap;
import java.util.Map;
public class ApplicationContext {
private static Map<String, Object> context = new HashMap<String, Object>();
public static <T> T getBean(String beanName, Class<T> clazz) {
return (T) context.get(beanName);
}
public static void addBean(Object obj) {
context.put(obj.getClass().getSimpleName(), obj);
}
}
package ddit.chap13.test02;
public class MainClass {
public static void main(String[] args) {
// 최초 객체를 생성하여 ApplicationContext 에 담는다.
TestVO v = new TestVO("a001", "김은대");
ApplicationContext.addBean(v);
// @Autowired
// ApplicationContext context;
// 함수내부
// context.getBean("휴가 서비스 클래스")
// obj.invoke(); -> 서비스 함수 호출
TestVO bean = ApplicationContext.getBean("TestVO", TestVO.class);
System.out.println(bean);
}
}
'대덕인재개발원_final project' 카테고리의 다른 글
(24) CICD (0) | 2024.02.19 |
---|---|
(23) 리눅스 (0) | 2024.02.13 |
(21) 웹 소켓 세팅 (1) | 2024.02.01 |
(20) 토요일 수업 4 (0) | 2024.01.13 |
(19) 보강 12 (0) | 2024.01.08 |