1. SRP 단일 책임 원칙 (Single Responsibility Principle)
- 한 클래스는 하나의 책임만 가져야 한다.
2. OCP 개방-폐쇄원칙 (Open/Closed Principle)
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있어야 한다.
3. DIP 의존관계 역전 원칙 (Dependency Inversion Principle)
- 구체화에 의존하지 말고 추상화에 의존해야 한다.
- 클라이언트 코드가 구현클래스에 의존하지 말고,
인터페이스에 의존해야한다.
아직 위 세 가지를 지켜가며 설계, 코드하기엔 실력이 모자르지만
회고록을 적어가며 다시 정리합니다.
스프링 프레임워크도 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너
인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다.
객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있는 장점이 있다.
IoC의 분류
DL(Dependency Lookup) 과 DI (Dependency Injection)
DL 사용시 컨테이너 종속이 증가하기 때문에 주로 DI를 사용합니다.
자바 어플리케이션은 어플리케이션 동작을 제공하는 객체들로 이루어져 있다.
이때, 객체들은 독립적으로 동작하는 것 보다 서로 상호작용하여 동작하는 경우가 많다.
이렇게 상호작용하는 객체를 '객체의 의존성'이라고 표현하는데,
스프링에서는 스프링 컨테이너에 객체들을 생성하면 객체끼리 의존성을 주입(DI; Dependency Injection)하는 역할을 해준다.
그리고 스프링 컨테이너에 등록한 객체들을 '빈'이라고 한다.
스프링 부트의 경우 @Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로
빈들을 등록하고 필요한 곳에서 @Autowired를 통해 의존성 주입을 받아 사용하는 것이 일반적입니다.