Reflection
힙 영역에 로드된 객체(클래스 타입)를 통해 필드/메소드/생성자를 접근 제어자에 상관 없이 사용 가능하도록 지원하는 API
런타임 시점에 동적으로 특정 클래스의 정보를 추출해 낼 수 있는 프로그래밍 기법이다.
주로 프레임워크 or 라이브러리 개발 시에 사용한다.
https://www.baeldung.com/reflections-library
Reflection을 사용하는 프레임워크 & 라이브러리
• Spring 프레임워크(예 : DI)
• Test 프레임워크(예 : JUnit)
• JSON Serialization/Deserialization 라이브러리(예 : Jackson) 등
요구사항
@Controller 애너테이션이 설정된 모든 클래스를 찾아 출력한다.
의존성 설정
dependencies {
implementation 'javax.servlet:javax.servlet-api:4.0.1'
implementation 'org.reflections:reflections:0.10.2'
implementation 'ch.qos.logback:logback-classic:1.2.3'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
testImplementation 'org.assertj:assertj-core:3.23.1'
}
실습 과정
① Controller annotation를 생성한다.
annotation 패키지 생성 > New Java Class > Annotation
② annotation를 붙일 Controller 객체를 생성한다.
③ 실습을 위한 프로덕션 코드를 작성한다.
④ 테스트 코드를 작성한다.
⑤ 테스트 코드에 작성한 코드를 메서드로 추출하여 정상 작동하는지 확인한다.
런타임 시점에 특정 클래스의 정보를 추출하면 좋은 점이 뭘까?
JUnit와 DI에 사용하는 걸 보면 아마 외부적인 요소와 관련 있는 게 아닐까?
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
'Java > [패스트캠퍼스] 50일 포트폴리오 챌린지' 카테고리의 다른 글
[12일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.19 |
---|---|
[11일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.18 |
[9일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.16 |
[8일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.15 |
[7일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.14 |