IOC,싱글톤,DI
https://brio-sw.tistory.com/27
스프링 컨테이너,스프링 빈
스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다.
스프링에서는 자바 객체를 빈(Bean)이라 한다.
즉, 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거 등)하며, 생성된 빈에게 추가적인 기능을 제공하는 것이다.
빈팩토리->어플리케이션 컨텍스트(하위), 주로 사용되는건 어플리케이션 컨텍스트
BeanFactory
빈 팩토리(BeanFactory)는 스프링 컨테이너의 최상위 인터페이스이다.
BeanFactory는 빈을 등록, 생성, 조회 등의 빈을 관리하는 역할을 하며, getBean() 메서드를 통해 빈을 인스턴스화 할 수 있다.
@Bean 어노테이션이 붙은 메서드의 이름을 스프링 빈의 이름으로 사용하여 빈 등록을 한다.
ApplicationContext
애플리케이션 컨텍스트(ApplicationContext)는 BeanFactory의 기능을 상속받아 제공한다.
따라서, 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고, 그 외의 부가 기능을 제공한다.
먼저, 객체를 생성하기 위해서는 new 생성자를 사용해야 한다. 그로 인해 애플리케이션에서는 수많은 객체가 존재하고 서로를 참조하게 된다.
객체 간의 참조가 많으면 많을수록 의존성이 높아지게 된다.
이는 낮은 결합도와 높은 캡슐화를 지향하는 객체지향 프로그래밍의 핵심과는 먼 방식이다.
따라서, 객체 간의 의존성을 낮추어(느슨한 결합) 결합도는 낮추고, 높은 캡슐화를 위해 스프링 컨테이너가 사용된다.
스프링빈으로 등록하는 법-configuration
아래 코드는 자바 어노테이션을 기반으로 컨테이너를 구성하고 스프링 컨테이너에 등록하는 예시이다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
아래 코드는 어노테이션 기반으로 위 코드에서 구성한 스프링 컨테이너를 생성하는 방법이다.
public class MemberApp {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class)
}
}
@ApplicationContext(AppConfig.class)
ApplicationContext를 스프링 컨테이너라고 하며, 인터페이스로 구현되어 있다.
- 다형성이 적용이 되어 있으며, 다양한 구현체가 존재
AnnotationConfigApplicationContext는 ApplicationContext 인터페이스의 구현체 중 하나이다.
@Configuration
스프링 컨테이너가 해당 어노테이션이 붙은 클래스를 설정 정보로 사용한다.
클래스 내부에 @Bean 어노테이션이 적힌 메서드를 모두 호출하여 얻은 객체를 스프링 컨테이너에 등록하게 된다.
스프링 컨테이너에 등록된 객체를 스프링 빈(Bean)이라 한다.
출처 : https://ittrue.tistory.com/220
스프링빈으로 등록하는 법-component scan
컴포넌트 스캔은 스프링 프레임워크가 클래스 경로에서 지정된 패키지를 스캔하여 특정 어노테이션을 가진 클래스들을 찾아 빈으로 등록하는 기능입니다.
주로 @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스를 스캔하여 빈으로 등록합니다.
예를 들어, @SpringBootApplication 어노테이션이 붙은 메인 클래스가 있는 패키지와 하위 패키지를 스캔하여 빈으로 등록합니다.
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Lombok
lombok?
Lombok의 기능은 model 클래스나 Entity 같은 도메인 클래스 등에 반복되는 getter, setter, toString 등의 메소드를 자동으로 만들어주는 기능을 합니다
method
- @NorgsConstructor : 파라미터가 없는 기본 생성자를 만들어줍니다.
- @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 만들어줍니다.
- @RequiredArgsConstructor : final이나 @NonNull 인 필드 값만 파라미터로 받는 생성자를 만들어줍니다.
- @EqualsAndHashCode : equals와 hashcode를 자동으로 생성해주는 어노테이션입니다.
- @Data는 위에서 설명한 Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode를 한번에 설정해주는 어노테이션으로 실무에서는 너무 무겁고 객체의 안정성을 지키기 때문에 @Data의 활용을 지양합니다.
- @Builder : 자동으로 해당 클래스에 빌더를 추가해줍니다.
'SpringBoot' 카테고리의 다른 글
스프링 데브툴 설정 (0) | 2024.05.11 |
---|---|
MVC, JPA,JPA 연관관계 (0) | 2024.04.09 |