1 ) 학습한 내용
- SOLID 원칙과 Spring 객체 지향
- Spring Container
- Spring Bean
- IOC/DI
- 싱글톤 패턴
- Spring Bean 등록
- 의존관계 주입
- Validation
- SOLID 원칙 - 객체 지향 설계의 5가지 기본 원칙, 소프트웨어 설계에서 유지보수성, 확장성, 유연성을 높이기 위한 지침을 제공.
- 종류
- 단일 책임 원칙 SPR (Single Responsibility Principle)
- 개방 폐쇄 원칙 OCP (Open Closed Principle)
- 리스코프 치환 원칙 LSP (Liskov Substitution Principle)
- 인터페이스 분리 원칙 ISP (Interface Segregation Principle)
- 의존관계 역전 원칙 DIP (Dependency Inversion Principle)
- 객체 지향의 핵심은 다형성에 있다. 하지만 다형성 만으로는 OCP, DIP를 지킬 수 없다.
- 종류
- Spring의 역할
- OCP, DIP 원칙을 지킬 수 있도록 도와준다.
- 코드의 변경 없이 기능을 확장할 수 있도록 만들어준다.
- 개발자가 마치 레고 블록을 조립하듯이 원하는 구성 요소를 손쉽게 교체하고 결합할 수 있도록 만들어준다.
- Spring Container
- Bean 관리, 의존성 주입
- 종류
- BeanFactory
- ApplicationContext
- Spring Baen
- Spring Container가 생성하고 관리하는 Java 객체
- 기본적으로 Singleton으로 설정
- 의존성 주입(DI)을 통해 다른 객체들과 의존 관계를 맺을 수 있다.
- 생성, 초기화, 사용, 소멸의 생명 주기를 가진다.
- IOC/DI
- 제어의 역전(IOC)
- 객체 생성과 의존성 관리를 개발자가 아닌 Spring이 담당
- 객체 간의 결합도를 낮춰 유연한 코드가 된다.
- 의존성 주입(DI)
- 객체 간의 의존성을 Spring Container가 주입
- 객체 간의 강한 결합을 유발한다.
- 제어의 역전(IOC)
- 싱글톤 패턴
- Spring Bean은 기본적으로 싱글톤 패턴으로 관리되어 하나의 인스턴스만 생성
- 상태를 가져서는 안된다.
- 문제점
- 구현하기 위한 코드의 양이 많다.
- 구현 클래스에 의존해야 한다. (DIP, OCP 위반)
- 유연성이 떨어져서 안티패턴으로 불리기도 한다.
- Spring Bean은 기본적으로 싱글톤 패턴으로 관리되어 하나의 인스턴스만 생성
- Spring Baen 등록
- 자동 등록(권장)
- @ComponentScan(Spring Boot) + @Component(@Controller, @Service, @Repository)
- 수동 등록
- @Configuration + @Bean
- 수동 등록이 자동 등록을 오버라이딩해서 우선권을 가진다. ( 대부분 버그 발생 )
- 자동 등록(권장)
- 의존관계 주입
- 의존 관계 주입을 하는 방법으로는 생성자 주입, setter 주입, 필드 주입, 메서드 주입 총 4가지 방법이 있지만 생성자 주입을 주목하자.
- 생성자 주입
- 생성자 + @Autowired를 통해 의존성을 주입받는다. 불변, 실수 방지
- RequiredArgsConstructor
- final 필드에 자동으로 생성자를 생성해 주입한다.
- 생성자 주입
- 의존 관계 주입을 하는 방법으로는 생성자 주입, setter 주입, 필드 주입, 메서드 주입 총 4가지 방법이 있지만 생성자 주입을 주목하자.
- Valildation
- BindingResult
- Valildation 오류 정보를 담는 객체
- Bean Valildation
- Annotation 기반으로 Valildation이 가능하도록 만들어진 표준 기술
- Bean Valildation의 충돌이 발생하는 경우 대부분 DTO를 분리하는 방법이 적절하다.
- BindingResult
'TIL > Spring' 카테고리의 다른 글
TIL 2024-11-18 (Cookie/Session) (0) | 2024.11.18 |
---|---|
TIL 2024-11-13 (Spring 숙련 - 2주차) (1) | 2024.11.13 |
TIL 2024-11-07 (Spring 입문 - 응답 데이터) (1) | 2024.11.07 |
TIL 2024-11-06 (Spring 입문 - 요청 데이터) (0) | 2024.11.06 |
TIL 2024-11-05 (Spring 입문 - Spring Annotation, Mapping) (0) | 2024.11.05 |