TIL/Spring

TIL 2024-11-12 (Spring 숙련 - 1주차)

myoma 2024. 11. 12. 22:11

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가 주입
      • 객체 간의 강한 결합을 유발한다.

 

  • 싱글톤 패턴
    • Spring Bean은 기본적으로 싱글톤 패턴으로 관리되어 하나의 인스턴스만 생성
      • 상태를 가져서는 안된다.
    • 문제점
      • 구현하기 위한 코드의 양이 많다.
      • 구현 클래스에 의존해야 한다. (DIP, OCP 위반)
      • 유연성이 떨어져서 안티패턴으로 불리기도 한다.

 

  • Spring Baen 등록
    • 자동 등록(권장)
      • @ComponentScan(Spring Boot) + @Component(@Controller, @Service, @Repository)
    • 수동 등록
      • @Configuration + @Bean
    • 수동 등록이 자동 등록을 오버라이딩해서 우선권을 가진다. ( 대부분 버그 발생 )

 

  • 의존관계 주입
    • 의존 관계 주입을 하는 방법으로는 생성자 주입, setter 주입, 필드 주입, 메서드 주입 총 4가지 방법이 있지만 생성자 주입을 주목하자.
      • 생성자 주입
        • 생성자 + @Autowired를 통해 의존성을 주입받는다. 불변, 실수 방지
      • RequiredArgsConstructor
        • final 필드에 자동으로 생성자를 생성해 주입한다.

 

  • Valildation
    • BindingResult
      • Valildation 오류 정보를 담는 객체
    • Bean Valildation
      • Annotation 기반으로 Valildation이 가능하도록 만들어진 표준 기술
      • Bean Valildation의 충돌이 발생하는 경우 대부분 DTO를 분리하는 방법이 적절하다.