3주차 WIL

김도엽·2022년 5월 29일
0

항해

목록 보기
3/5

객체지향 설계 원칙

1. SRP 단일 책임 원칙

2. OCP 개방-폐쇄 원칙

3. DIP 의존관계 역전 원칙

1. SRP 단일 책임 원칙 (Single Responsibility Principle)
- 한 클래스는 하나의 책임만 가져야 한다.

2. OCP 개방-폐쇄원칙 (Open/Closed Principle)
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있어야 한다.

3. DIP 의존관계 역전 원칙 (Dependency Inversion Principle)
- 구체화에 의존하지 말고 추상화에 의존해야 한다.
- 클라이언트 코드가 구현클래스에 의존하지 말고,
  인터페이스에 의존해야한다.

아직 위 세 가지를 지켜가며 설계, 코드하기엔 실력이 모자르지만
회고록을 적어가며 다시 정리합니다.

IoC 컨테이너

스프링 프레임워크도 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너

인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다.
객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있는 장점이 있다.

  • IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
  • POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
  • 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
  • 개발자는 비즈니스 로직에 집중할 수 있다.
  • 객체 생성 코드가 없으므로 TDD가 용이하다.

IoC의 분류
DL(Dependency Lookup) 과 DI (Dependency Injection)

  • DL : 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lockup하는 것
  • DI : 각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
    - Setter Injection (수정자 주입)
    - Constructor Injection (생성자 주입)
    - Method Injection (필드 주입)
    DL 사용시 컨테이너 종속이 증가하기 때문에 주로 DI를 사용합니다.

BEAN

자바 어플리케이션은 어플리케이션 동작을 제공하는 객체들로 이루어져 있다.
이때, 객체들은 독립적으로 동작하는 것 보다 서로 상호작용하여 동작하는 경우가 많다.
이렇게 상호작용하는 객체를 '객체의 의존성'이라고 표현하는데,
스프링에서는 스프링 컨테이너에 객체들을 생성하면 객체끼리 의존성을 주입(DI; Dependency Injection)하는 역할을 해준다.
그리고  스프링 컨테이너에 등록한 객체들을 '빈'이라고 한다.

스프링 컨테이너에 Bean을 등록하는 두 가지 방법

  1. 컴포넌트 스캔과 자동 의존관계 설정
  2. 자바 코드로 직접 스프링 빈 등록

스프링 부트의 경우 @Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로
빈들을 등록하고 필요한 곳에서 @Autowired를 통해 의존성 주입을 받아 사용하는 것이 일반적입니다.

profile
즐거운

0개의 댓글