일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- 티스토리 야간모드
- Kubernetes
- 3분철학
- 클라우드입문자
- 교양철학
- docker
- 원씽
- sm회사
- nhn_cloud_console
- 쿠버네티스
- spring mvc project
- sts3
- 도커
- 미국채권
- 쿠버네티스기초
- nhn cloud
- 일상의행복
- 거래소 운영시간
- 만화로보는3분철학
- 다국어 입력전환
- Mac m1
- m1 sts3 설치
- 다크모드
- si회사
- 만화철학
- 코딩 특수문자
- 성장마인드셋
- 슬래시24
- 클라우드기초교육
- Rectangle
- Today
- Total
Good Morning
Java 리플렉션을 이용한 간단한 의존성 주입 구현하기 본문
Java의 리플렉션(Reflection)을 사용하여 간단한 의존성 주입(Dependency Injection) 시스템을 구현하는 방법에 대해 알아보겠습니다.
1. 기본 클래스 구조
먼저, 다음과 같은 기본 클래스 구조를 가정해봅시다:
class Car {}
class SportsCar extends Car {}
class Truck extends Car {}
class Engine {}
2. 설정 파일을 이용한 객체 생성
객체 생성을 위해 "config.txt" 파일에 다음과 같이 설정을 저장합니다:
car=com.fastcampus.ch3.diCopy1.SportsCar
engine=com.fastcampus.ch3.diCopy1.Engine
3. 동적 객체 생성 메소드
getObject
메소드를 사용하여 설정 파일에서 클래스 이름을 읽고, 리플렉션으로 객체를 생성합니다:
static Object getObject(String key) throws Exception {
Properties p = new Properties();
p.load(new FileReader("config.txt"));
Class clazz = Class.forName(p.getProperty(key));
return clazz.newInstance();
}
4. 메인 메소드
메인 메소드에서 getObject
를 사용하여 객체를 생성하고 출력합니다:
public static void main(String[] args) throws Exception {
Car car = (Car) getObject("car");
Engine engine = (Engine) getObject("engine");
System.out.println("car = " + car);
System.out.println("engine = " + engine);
}
5. 실행 결과
car=com.fastcampus.ch3.diCopy1.SportsCar
engine=com.fastcampus.ch3.diCopy1.Engine
코드 분석
설정 파일 사용: "config.txt" 파일을 통해 생성할 객체의 클래스를 외부에서 지정할 수 있습니다.
리플렉션 활용:
Class.forName()
과newInstance()
를 사용하여 동적으로 객체를 생성합니다.유연성: 코드 수정 없이 설정 파일만 변경하여 다른 구현 클래스로 쉽게 전환할 수 있습니다.
타입 안전성:
getObject
메소드는Object
를 반환하므로, 적절한 타입으로 캐스팅이 필요합니다.
주의사항
예외 처리: 실제 프로덕션 코드에서는 더 세밀한 예외 처리가 필요합니다.
성능: 리플렉션은 직접 객체 생성보다 느릴 수 있으므로, 성능에 민감한 상황에서는 주의가 필요합니다.
보안: 리플렉션을 통해 private 멤버에 접근할 수 있으므로, 보안 측면에서 주의가 필요합니다.
결론
이 예제를 통해 Java의 리플렉션을 이용하여 간단한 의존성 주입 시스템을 구현해 보았습니다. 이는 스프링 프레임워크와 같은 고급 DI 컨테이너의 기본 원리를 이해하는 데 도움이 될 것입니다.
더 복잡한 시스템에서는 생성자 주입, 필드 주입 등 다양한 주입 방식과 함께 라이프사이클 관리, AOP 등의 기능이 추가될 수 있습니다. 이러한 고급 기능들은 스프링과 같은 프레임워크에서 제공되며, 이 예제는 그 기본 개념을 이해하는 데 좋은 시작점이 될 것입니다.
'Back-End > Spring' 카테고리의 다른 글
Spring AOP 입문자 가이드: 자동 로깅 예제로 배우는 AOP (1) | 2024.08.08 |
---|---|
Spring Framework 핵심 기능 탐구: 컴포넌트 스캔, 의존성 주입, 그리고 ApplicationContext (0) | 2024.08.06 |
스프링 MVC에서의 에러 페이지 리다이렉션 이해하기 (1) | 2024.08.01 |
Spring Framework에서의 효과적인 예외 처리 (0) | 2024.08.01 |
Spring MVC에서 로그아웃 기능 구현 시 흔히 발생하는 오류와 해결 방법 (0) | 2024.07.31 |