1. Spring 프로젝트의 구성요소
1-1. 설정
- JDK: 프로젝트의 버전
- 스프링 개발 도구 모음: Spring tool suite(STS) 등 개발 도구 모음
1-2. 의존성 관리
- pom.xml: Maven 기반 프로젝트 의존성 관리
- .gradle: Gradle 기반 프로젝트 의존성 관리
1-3. 실행 메서드(부트스트랩 메서드)의 어노테이션
- @Configuration
- 스프링 설정 클래스
- AnnotationConfigApplicationContext 클래스와 연관
- @Bean
- 메서드를 Spring Bean으로 만들어줌 -> 메서드를 스프링 관리 대상으로 설정
- getBean()으로 활용 가능(단, 객체 선언이 우선되어야 함)
- getBean() 대신 Application Context를 호출해서 사용할 수 있음
- 작업의 위임 달성으로 비즈니스 로직만 고려 대상이 됨
- 의존성 주입(DI)의 수행 과정
2. Spring의 특징
2-1. 제어 역전
- 생성, 소멸 등의 작업을 Bean에 위임
- Bean Factory에서 시작되는 작업
2-2. 상속을 거쳐 구체화, 확장됨
- Bean의 상속은 내용을 구체화하고 기능을 추가함
- 초기화 방법
- BeanFactory: 지연 초기화(객체 필요 시점에 초기화)
- ApplicationContext: 즉시 초기화(컨테이너 시작 시 모든 객체를 싱글톤으로 초기화)
2-3. Bean은 싱글톤
2-4. AnnotationConfigApplicationContext로 설정
- 과거
- XML 기반
- GenericXmlApplicationContext -> 소스 코드와 설정을 분리
- 현재
- GenericGroovyApplicationContext -> Groovy
- AnnotationConfigApplicationContext
- 특징
- 객체 생성이 불필요 -> Bean 객체가 싱글톤 범위이기 때문
- private 생성자로 생성 및 접근 통제
3. 싱글톤의 특징
- 생성자가 Private이다
- getInstance로 인스턴스를 반환하며, static 타입이다 -> 이로 인해 필드도 static 타입이 됨
- Spring에서 @Bean 어노테이션의 기본값이며, 하나의 객체만 생성되는 원인
- 싱글톤으로 만들어진 객체는 여러 참조 변수에서 참조하더라도 하나의 주소만 참조 대상이 됨
4. 의존
4-1. 정의
- 한 클래스가 다른 클래스의 메서드를 사용하는 것
- 변경에 영향을 받으며, 코드 변경 시 해당 코드를 사용하는 대상도 변경해야 함
- 즉, 변경이 많아지면 바꾸는 소스코드 양도 많아질 가능성이 있음
4-2. 의존 객체 설정하기
- 의존 대상 객체를 직접 설정
- 객체를 직접 만들기
- 구현에는 용이하지만 유지보수가 어려움
- DI 활용
- 의존 객체를 전달하기만 함 -> 생성자 활용
- 의존 객체 주입부만 수정해서 변경을 반영할 수 있음
- 의존 강도가 낮아짐
4-3. 의존성 낮추기
- 인스턴스를 외부에서 만들어서 상속하기 -> 의존성 역전(DI)
- 방법
- 프로젝트 구조를 알고 있어야 한다는 단점 존재
- @Autowired 어노테이션을 사용해서 의존 주입 코드 생략 가능
5. Spring의