프로그래밍 공부/Spring

스프링 스터디 기본편 -2

* 해당 내용은 스프링 핵심원리 기본편 - 인프런 강의를 기반으로 정리합니다

 

스프링 핵심 원리 이해2 - 객체지향 원리 적용

spring 관련

의존관계의 중요성에 대해서 다시 생각해보게 된다. 

객제지향설계를 잘 만들기 위해서는 (SOLID라고 하는 5개의 원칙이 있는 것은 알고 있었으나, 실제 스프링 개발에서 사용하는 것은 처음이었어서 좀 더 주의 깊게 보았던 것 같다. 

참고로 적어보는 SOLID의 5가지
  • SRP 단일책임원칙 : 한 클래스는 하나의 책임만
  • OCP 개방 - 폐쇄 원칙 : 확장에는 열려있고, 변경에는 닫혀있어야 한다.
  • LSP 리스코프 치환 원칙 : 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • ISP 인터페이스 분리 원칙: 관련된 인터페이스만 사용하여야 한다.
  • DIP 의존관계 역전 원칙 : 추상화에 의존해야지 구체화에 의존해서는 안된다.

→ 참고로 강의에서는 DIP와 OCP 위주로 이야기가 나왔다. 

 

이러한 어플리케이션의 의존 문제를 해결하기 위해 나온 것이 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스이다.

 

AppConfig에서는 이제 어플리케이션의 환경설정 등을 전부 지정한다.

 

생성자를 통해서 주입하는 것을 사용한다.

구체적인 클래스 내에서 정하는 것이 아니라, 생성자를 통해서 구성하게 되는 것이다. 

 

다음과같이 구성해서 의존관계를 주입시켜준다.

 

 

이렇게 테스트에서도 Beforeeach (각 테스트 이전에 실행)을 통해 구현한다.

그런데, 위의 사진의 경우 MemoryMemberRepository가 중복되어있고, 각각의 역할이 정확히 보여있지 않다.

따라서 Refactoring을 진행하면,

Ctrl + Alt + M을 통해서 정한다
Refactor 이후의 appconfig - 각각의 이름과 전체구성이 한눈에 보인다!

 

제어의 역전 IOC

AppConfig가 등장한 이후, 구현 객체는 자신의 로직만을 실행하고, 어떤 구현 객체들이 실행될지는 모름

Appconfig → 프로그램에 대한 제어 흐름을 전부 가짐.

프로그램의 제어 흐름을 외부에서 관리하는 것이 제어의 역전.

 

의존관계 주입 DI

의존관계는 정적인 클래스 의존관계와 실행 시점에 결정되는 동적인 객체 의존관계가 분리된다.

정적인 클래스 의존관계 → import문을 통해서 바로 확인 가능 (실행 X여도 확인 OK)

 

Bean을 통해서 Spring으로 변경했다

@Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용하고, 이후에 스프링 컨테이너를 통해서 필요한 스프링 빈 (객체)를 찾는 과정이 진행된다. 스프링 빈은 applicationContext.getBean() 메서드를 통해서 찾을 수 있다.

 


IntelliJ 관련

ctrl + shift + T (윈도 기준)을 누르면 아래처럼 테스트를 바로 만들 수 있다. 

 

 

사담

 

 

'프로그래밍 공부 > Spring' 카테고리의 다른 글

스프링 스터디 기본편 -5  (0) 2021.04.25
스프링 스터디 기본편 - 4  (0) 2021.04.25
스프링 스터디 기본편 -4  (0) 2021.04.22
스프링 스터디 기본편 -3  (0) 2021.04.22
스프링 스터디 기본편 - 1  (0) 2021.04.17